почему cin просто проваливается? - PullRequest
0 голосов
/ 08 июля 2019

Я читаю Принципы и практика программирования на с ++ . Я это понимаю: 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;
    }
}
...