传递错误条件后,while循环将无法退出

时间:2019-06-09 15:13:16

标签: c++ while-loop

考虑以下代码,以计算用户在运行时输入的数字之和:

#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循环没有退出?


请考虑以下我的程序示例运行:

  • 3
  • 2
  • 1
  • 0
  • 5

(然后最后按ctrl-z指示文件结束)

总和是:11


在上述示例运行中,我对此表示怀疑:

输入0之后,不会提示我进行进一步的输入,因为根据我的说法,while(0)的计算结果应为false,因此,应在屏幕上显示告诉输入的数字总和直到0的语句,但不会发生。

2 个答案:

答案 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)。