我正在试图制作一个模仿Bjarne Stroustrup的C++书籍中的代码示例的程序。这是使计算器能够解析需要评估的更长表达式的初始方法。 我不在乎运营商的优先权只是,我想了解我目前的代码所遇到的问题。那就是:为什么这个程序需要3行输入?
#include <iostream>
using namespace std;
int main() {
cout << "Expression: ";
int lval = 0; //left-hand value
int rval; // right-hand value
char op;
cin >> lval; //read leftmost operand
while (cin>>op) { //read operator and righ-hand operand repeatedly
cin >> rval;
switch (op) {
case '+':
lval += rval; //add: lval = lval+rval
break;
case '-':
lval -= rval; //subtract: lval = lval-rval
break;
case '*':
lval *= rval; //multiply: lval =lval*rval
break;
case '/':
lval /= rval; // divide: lval = lval/rval
break;
default: // not another operator: print result
cout << "Result: " << lval << '\n';
return 0;
}
}
return 0;
}
当我编译并运行程序,我总是需要添加输入的两个额外的线路,例如:
$ ./calculator
>Expression: 1+2+3
>
>
[I can keep pressing enter as many times as I wish until I type in 2 more lines]
>l
>l
>Results: 6
程序为何这样的行为?为什么cin>>op
在读取\n
字符时返回false?
它混淆了我,因为我复制了while(cin>>op)
部分从书。
你有两个问题,'CIN >> op'永远不会提取'\ N'因为空白被它抛弃,所以你必须输入的东西,这不是运营商之一,以终止您的循环。第二个问题是,即使没有找到操作符,您也总是读取右侧的操作数。这就是为什么你必须输入两行 – melak47