📄 pr06025.cpp
字号:
////////////////////////////////////////
// File Name: pr06025.cpp
////////////////////////////////////////
#include <iostream>
#include <cstdlib>
#include <cctype>
// Function prototypes.
int addsubt();
int multdiv();
int number();
void error();
// Global expression buffer.
static char expr[81];
static int pos;
////////////////////////////////////////
// The main() function.
////////////////////////////////////////
int main()
{
int ans;
do
{
// Initialize the string subscript.
pos = 0;
// Read an expression.
std::cout << "Enter expression (0 to quit):"
<< std::endl;
std::cin >> expr;
// Evaluate the expression.
ans = addsubt();
if (expr[pos] != '\0')
error();
if (ans != 0)
std::cout << ans << std::endl;
}
while (ans != 0);
return 0;
}
//////////////////////////////////////////
// Top of recursive descent: add/subtract.
//////////////////////////////////////////
int addsubt()
{
int rtn = multdiv();
while (expr[pos] == '+' || expr[pos] == '-')
{
int op = expr[pos++];
int opr2 = multdiv();
if (op == '+')
rtn += opr2;
else
rtn -= opr2;
}
return rtn;
}
////////////////////////////////////////
// Highest precedence: multiply/divide.
////////////////////////////////////////
int multdiv()
{
int rtn = number();
while (expr[pos] == '*' || expr[pos] == '/')
{
int op = expr[pos++];
int opr2 = number();
if (op == '*')
rtn *= opr2;
else
rtn /= opr2;
}
return rtn;
}
////////////////////////////////////////
// Extract a number.
////////////////////////////////////////
int number()
{
int rtn;
if (expr[pos] == '(')
{
// Parenthetical expression.
pos++;
rtn = addsubt(); // Back to top.
if (expr[pos++] != ')') // Must have ')'
error();
return rtn;
}
// Extract the number.
if (!isdigit(expr[pos]))
error();
rtn = atoi(expr+pos);
while (isdigit(expr[pos]))
pos++;
return rtn;
}
////////////////////////////////////////
// Syntax error.
////////////////////////////////////////
void error()
{
std::cout << '\r';
while (pos--) // Position error pointer.
std::cout << ' ';
std::cout << "^ syntax error" << std::endl << '\a';
exit(-1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -