【发布时间】:2012-06-05 05:54:57
【问题描述】:
所以我很好奇为什么会发生这种情况。
int main()
{
bool answer = true;
while(answer)
{
cout << "\nInput?\n";
cin >> answer;
}
return 0;
}
预期行为: 0 - 退出程序, 1 - 再次提示, 除 1 以外的任何非零整数 - 再次提示
实际行为: 0 - 正如预期的那样, 1 - 正如预期的那样, 除 1 以外的任何非零整数 - 无限循环
来自http://www.learncpp.com/cpp-tutorial/26-boolean-values/
One additional note: when converting integers to booleans,
the integer zero resolves to boolean false,
whereas non-zero integers all resolve to true.
程序为什么会陷入死循环?
【问题讨论】:
-
+1 提出一个恰当的问题。布尔值是一条红鲱鱼;真正的问题与流输入的工作方式有关。用 int 尝试同样的事情,然后输入一个字母,看看会发生什么;-)
-
也许我错了,但是当您输入表单命令行时...不会变成字符串,因此您实际上是在字符串和布尔值之间进行转换?这可能会把事情搞砸......
-
Cameron 提出了一个很好的观点:一个字符可以转换为一个整数。例如,
'A' == 65,但同样的事情也会发生。 -
@Flo:不,这根本不是命令行输入的工作方式。
-
@Flo:从字符串到布尔值的转换正是
operator>>(istream&, bool&)的目标。同样,operator>>(istream&, int&)将字符串转换为整数。
标签: c++ boolean type-conversion iostream