检查While循环中的分配

时间:2013-05-23 18:03:53

标签: c++ while-loop io

我正在使用while循环尝试以下基本求和程序:

#include <iostream>
using std::cin;
using std::cout;


int main(){

int userIn;
int runningSum =0;

while((std::cin >> userIn) != 0){
   if(userIn == 0) std::cout << "Should never execute";
   runningSum += userIn;
}
return runningSum;
}

即使用户输入0,我也无法理解为什么while循环会执行。

2 个答案:

答案 0 :(得分:2)

如果输入成功,

(std::cin >> userIn)将为!= 0,而不是输入为0

要同时检查两者,您可以执行while ( (std::cint >> userIn) && userIn )。这将首先确保输入成功,然后数字实际上是非零。

答案 1 :(得分:0)

习惯于引用像这样的页面对你有好处 http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/

它描述了运算符&gt;&gt;()函数的返回值,它是istream(cin)对象本身。这意味着

while((std::cin >> userIn) != 0)

不会做你期望它做的事情,并且循环实际上永远不会被打破。

你真正想要的是

std::cin >> userIn;
do {
   if(userIn == 0) std::cout << "Should never execute";
   runningSum += userIn;
   std::cin >> userIn;
} while (userIn != -1);