考虑以下代码,以计算用户在运行时输入的数字之和:
#include <iostream>
using namespace std;
int main()
{
int sum = 0; //stores sum of numbers
int taken; //stores the number inputted by the user
while(cin>>taken)
{
sum += taken;
}
cout<<"The sum is : "<<sum;
return 0;
}
现在,我希望循环自动退出,并在用户输入0时立即显示用户输入的数字总和,因为while(0)
的计算结果为false,因此循环终止,因此应当打印报表的总数。
但这不会发生。
那么,为什么当用户输入0作为输入时while
循环没有退出?
(然后最后按ctrl-z指示文件结束)
总和是:11
输入0之后,不会提示我进行进一步的输入,因为根据我的说法,while(0)
的计算结果应为false,因此,应在屏幕上显示告诉输入的数字总和直到0的语句,但不会发生。
答案 0 :(得分:4)
cin>>taken
的值不是taken
的值。那是你的误会。
您可以编写此代码
while (cin >> taken && taken != 0)
{
...
}
这将满足您的要求。
请注意,cin >> taken
的值反映了流状态。通常在布尔上下文中,流的评估结果为true,但是如果发生某种错误,则流的评估结果为false。这就是while (cin >> taken)
有效表示要读取直到无法读取更多整数的原因。
答案 1 :(得分:2)
那么,为什么当用户输入0作为输入时
while
循环没有退出?
while (cin >> taken)
的计算结果不是while (taken)
,而是while (bool(cin))
。读完变量后,cin
将被强制转换为bool
,后者将检查流中是否有错误。
从docs:
返回值
true
(如果流没有错误,否则为false
)。