我正在試圖製作一個模仿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