📄 cpp03.cpp
字号:
// Coded by plusir -- Dec.29.2002.
// Standard C++ Bible -- (P213-7-3)
#include <iostream>
#include <cctype>
#include <csetjmp>
using namespace std ;
int addsubt( void ) ;
int multdiv( void ) ;
int number( void ) ;
void error( void ) ;
static char expr[81] ;
static int pos ;
static jmp_buf errjb ;
int main()
{
int ans ;
do {
if ( setjmp( errjb ) == 0 ) {
pos = 0 ;
cout << "Enter expression( 0 to quit ): " ;
cin >> expr ;
ans = addsubt() ;
if ( expr[pos] != '\0' )
error() ;
if ( ans != 0 )
cout << ans << endl ;
}
else {
cout << "Try again." << endl ;
ans = 1 ;
}
} while ( ans != 0 ) ;
return 0 ;
}
int addsubt( void )
{
int rtn = multdiv() ;
while ( expr[pos] == '+' || expr[pos] == '-' ) {
int op = expr[pos++] ;
int opr2 = multdiv() ;
if ( op == '+' )
rtn += opr2 ;
else
rtn -= opr2 ;
}
return rtn ;
}
int multdiv( void )
{
int rtn = number() ;
while ( expr[pos] == '*' || expr[pos] == '/' ) {
int op = expr[pos++] ;
int opr2 = number() ;
if ( op == '*' )
rtn *= opr2 ;
else
rtn /= opr2 ;
}
return rtn ;
}
int number( void )
{
int rtn ;
if ( expr[pos] == '(' ) {
pos++ ;
rtn = addsubt() ;
if ( expr[pos++] != ')' )
error() ;
return rtn ;
}
if ( ! isdigit( expr[pos] ) )
error() ;
rtn = atoi( expr + pos ) ;
while ( isdigit( expr[pos] ) )
pos++ ;
return rtn ;
}
void error( void )
{
cout << '\r' ;
while ( pos-- )
cout << ' ' ;
cout << "^syntax error" << endl << '\a' ;
longjmp( errjb, 1 ) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -