0

我正在使用 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 循环。

4

2 回答 2

2

(std::cin >> userIn)将是!= 0如果输入成功,而不是如果输入是0.

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

于 2013-05-23T18:04:52.747 回答
0

习惯于参考 http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/之类的页面对您很有帮助

它描述了 operator>>() 函数的返回值,即 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);
于 2013-05-23T18:10:57.350 回答