在 C++ 程序中,我试图处理由整数操作数和运算符 (+ - / *) 组成的用户输入。我可以要求用户在每个运算符之前和之后放置空格。我的方法是假设任何不是 int 的东西都是运算符。因此,一旦流中出现非 eof 错误,我就会调用 cin.clear() 并将下一个值读入字符串。
#include <iostream>
#include <string>
//in some other .cpp i have these functions defined
void process_operand(int);
void process_operator(string);
using namespace std;
int main()
{
int oprnd;
string oprtr;
for (;; )
{
while ( cin >> oprnd)
process_operand(oprnd);
if (cin.eof())
break;
cin.clear();
cin >> oprtr;
process_operator(oprtr);
}
}
这适用于 / 和 * 运算符,但不适用于 + - 运算符。原因是 operator>>
在报告错误之前吃掉 + 或 - 并且不会将其放回流中。所以我得到一个无效的令牌读入 optrr。
Ex: 5 1 * 2 4 6 * / works fine
5 1 + 2
^ ---> 2 becomes the oprnd here.
处理这个问题的好 C++ 方法是什么?