为何输入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
相关产品推荐
相关产品推荐

