【发布时间】:2014-03-11 22:58:25
【问题描述】:
在 Bjarne Stroustrup 的 Programming Principles and Practice Using C++(第六次印刷,2012 年 11 月) 中,if (cin) 和 if (!cin) 在 p.148 中介绍,并在 p.178 中认真使用。 while (cin)在第183页介绍,在第201页认真使用。
但是,我觉得我并不完全了解这些构造的工作原理,所以我正在探索它们。
如果我编译并运行它:
int main()
{
int i = 0 ;
while (cin) {
cout << "> ";
cin >> i ;
cout << i << '\n';
}
}
我得到类似的东西:
$ ./spike_001
> 42
42
> foo
0
$
- 为什么输入“foo”显然会导致
i被设置为0? - 为什么输入“foo”会导致
cin被设置为false?
或者,如果我运行并编译它:
int main()
{
int i = 0 ;
while (true) {
cout << "> ";
cin >> i ;
cout << i << '\n';
}
}
我得到类似的东西:
$ ./spike_001
> 42
42
> foo
> 0
> 0
...
这里用户输入的最后一部分是foo。输入之后,> 0 行会被程序反复打印到 stdout,直到被 Ctrl+C 停止。
- 再次,为什么输入“foo”会导致
i被设置为0? - 为什么在输入
foo后,在while 循环的下一次迭代中没有提示用户输入i的新值?
这是使用g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3。
很抱歉问了这么长的问题,但我认为这一切都归结为“如何评估 cin?”
【问题讨论】:
-
您需要检查错误标志。问题是您试图将字符串
"foo"输入整数i。cin通常在使用>>运算符时执行必要的类型转换,但无法将"foo"转换为 int。
标签: c++