私は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;
}
私はコンパイルしてプログラムを実行すると、私はいつも、たとえば、入力の2つの余分な行を追加する必要があります。
$ ./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
なぜプログラムがこのように動作するのでしょうか? \n
文字を読み取ったときに、なぜcin>>op
がfalseを返さないのですか?
私は本からwhile(cin>>op)
部分をコピーしたので私は混乱します。
次の2つの問題、 '空白は、それによって破棄されるので、CIN >> op'は' \のN 'を抽出することはありませんので、あなたがあなたのループを終了するために、事業者の一つではない何かを入力する必要がありますがあります。 2つ目の問題は、オペレータが見つからなくても、右手側のオペランドを常に*読み込むことです。そのため、2行を入力しなければなりません – melak47