⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpp25.cpp

📁 C++参考书
💻 CPP
字号:

// Coded by plusir -- Dec.28.2002.
// Standard C++ Bible -- (P190-6-25)

#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std ;

int addsubt( void ) ;
int multdiv( void ) ;
int number( void ) ;
void error( void ) ;

static char expr[81] ;
static int pos ;

int main()
{
	int ans ;

	do {
		pos = 0 ;

		cout << "Enter expression( 0 to quit ): " ;
		cin >> expr ;

		ans = addsubt() ;

		if ( expr[pos] != '\0' )
			error() ;

		if ( ans != 0 )
			cout << ans << endl ;
	} 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' ;
	
	exit( 1 ) ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -