Я читаю Принципы и практика программирования на с ++ . Я это понимаю:
1. Когда я ввожу 1+2x
, выполняется этот оператор lval += rval;
, и программа прерывается, и цикл for
начинается снова.
2. На этот раз cin
извлекает новую строку в op
. И поскольку op !=x
, то этот оператор cin >> rval
выполняется и ожидает ввода.
3. Поэтому я ожидаю, что инструкция по умолчанию никогда не будет выполнена, пока я не введу что-либо на консоли.
На самом деле, программа работает правильно, я ничего не ввожу. Это производит Result: 3
. Почему это так?
#include <iostream>
int main()
{
using namespace std;
cout << "Please enter expression (we can handle +, –, *, and /)\n";
cout << "add an x to end expression (e.g., 1+2*3x): ";
int lval = 0;
int rval;
cin >> lval; // read leftmost operand
if (!cin) cout << "no first operand";
for (char op; cin >> op;) { // read operator and right-hand operand
// repeatedly
if (op != 'x') cin >> rval;
if (!cin) cout << "no second operand";
switch (op) {
case '+':
lval += rval; // add: lval = lval + rval
break;
default: // not another operator: print result
cout << "Result: " << lval << '\n';
return 0;
}
}