为什么身体被执行?

时间:2013-02-24 06:44:02

标签: c++

我有以下程序:

int main() {
  int i;
  while (cin >> i) {
    cout << abs(i) << endl;
  }
  return 0;
}

(其中abs由int abs(int val)定义)

当我输入非int数字时,例如-1.2,它将给出以下输出:

$ -1.2
1

我的问题是:为什么while身体会被执行?我认为一旦输入非int值,条件应该失败,程序应该终止。谢谢!

2 个答案:

答案 0 :(得分:2)

因为输入操作符读取-1,并在点处停止。下一次循环时,输入操作符会看到点并设置fail标志,终止循环。

答案 1 :(得分:2)

您的程序只读取一个整数,而不是更多。如果使用cin读取int值,则运算符将只读取int,因此使用小数将使其仅读取到点。例如,输入-55.365实际上只会发送-55。