You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何输入0时C++的while循环未按预期退出?

问题解析:为什么输入0后循环没有退出?

嘿,我来帮你捋清楚这个问题~

首先得明确你写的while(cin>>taken)这个循环的判断逻辑:它不是在判断输入的值是不是0,而是在判断「从输入流读取整数的操作是否成功」。

当你输入0的时候,0是一个完全合法的整数,cin可以成功把它读取到变量taken里,所以这个条件的结果是true,循环会继续执行——不仅会把0加到总和里,还会继续等待下一个输入。只有当输入流出现读取失败的情况(比如输入了非数字的字符,或者按下ctrl-z/ctrl-d触发EOF),cin>>taken才会返回false,循环才会终止。

就像你举的例子:输入3 2 1 0 5,这些都是有效的整数,所以每一个都会被读取并加到sum里(3+2+1+0+5=11),直到你按下ctrl-z触发EOF,循环才结束,最后输出总和11。

如何实现「输入0就退出循环」?

如果你想要输入0的时候就终止循环,可以根据需求选下面两种方式:

方式1:输入0就停止,且0不加入总和

把循环条件改成读取成功且输入值不等于0:

#include <iostream>
using namespace std;
int main() {
    int sum = 0;
    int taken;
    while(cin>>taken && taken != 0) { // 读取到0就不进入循环
        sum += taken;
    }
    cout<<"The sum is : "<<sum;
    return 0;
}

方式2:输入0后先加入总和,再退出循环

在循环内部判断,读取到0后执行break:

#include <iostream>
using namespace std;
int main() {
    int sum = 0;
    int taken;
    while(cin>>taken) {
        sum += taken;
        if(taken == 0) { // 先加0到总和,再退出循环
            break;
        }
    }
    cout<<"The sum is : "<<sum;
    return 0;
}

内容的提问来源于stack exchange,提问作者pikafan_8080

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:55:08