【问题标题】:While loop fails to exit when a false condition is passed to it当错误条件传递给它时,while循环无法退出
【发布时间】:2019-06-09 23:27:33
【问题描述】:

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

#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) 应该评估为假,因此应该在屏幕上打印告诉输入数字总和直到 0 的语句,这不会发生。

【问题讨论】:

    标签: c++ while-loop


    【解决方案1】:

    cin&gt;&gt;taken 的值不是taken 的值。那是你的误会。

    你可以写这段代码

    while (cin >> taken && taken != 0)
    {
        ...
    }
    

    这会做你想做的。

    作为旁注,cin &gt;&gt; taken 的值反映了流状态。通常在布尔上下文中,流计算为真,但如果发生某种错误,则流计算为假。这就是为什么while (cin &gt;&gt; taken) 实际上意味着读取直到无法读取更多整数。

    【讨论】:

      【解决方案2】:

      那么,为什么当用户输入0作为输入时while循环不退出呢?

      while (cin &gt;&gt; taken) 的计算结果不是while (taken),而是while (bool(cin))。读入变量后,cin 将被转换为bool,它会检查流是否有错误。

      来自docs

      返回值

      true 如果流没有错误,false 否则。

      【讨论】:

        猜你喜欢
        • 2023-01-12
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-15
        相关资源
        最近更新 更多