代码进入无限循环,不知道为什么

时间:2017-10-09 04:05:36

标签: c++

我参加了c ++课程的介绍,并且遇到了这个问题:

  

"写一个循环,从标准输入中读取正整数,并在读取非正数的整数时终止。循环终止后,它打印出读取的所有偶数整数的总和,读取的所有奇数整数的总和,读取的偶数整数的计数,以及读取的奇数整数的计数,全部由恰好是一个空间。声明所需的任何变量。"

我的解决方案如下:

int num = 0;
int evens = 0;
int odds = 0;
int evenSum = 0;
int oddSum = 0;

do {
    cin >> num;
    if (num % 2 == 0){
        evens++;
        evenSum += num;
    }
    else if (num > 0) {
        odds++;
        oddSum += num;
    }
    else {
        num = -1;
    }
}
while (num >= 0);
cout << evenSum << " " << oddSum << " " << evens << " " << odds;

我得到的反馈除了&#34;失败:代码进入无限循环&#34;从自动编程器。我做错了什么?

3 个答案:

答案 0 :(得分:1)

你也在这个if (num % 2 == 0)部分处理负数(例如:遇到第一个负整数的情况也是真的,例如-6),从而递增evens并添加这个负数evenSum,根据您的问题的要求,这些数字根本没有完成;另一件事是else部分不是必需的,我的意思是为什么将-1分配给num而不是让它保持你刚才读的相同数字(因为它不在你的问题的要求中)。

我认为您的else ifelse部分需要像这样更改:

#include <iostream>

using namespace std;

int main(){

int num;
int evens = 0;
int odds = 0;
int evenSum = 0;
int oddSum = 0;

while (true) {
    cin >> num;

    if (num < 0){
        break;
    }

    if (num % 2 == 0){
        evens++;
        evenSum += num;
    }
    else {
        odds++;
        oddSum += num;
    }
}

cout << evenSum << " " << oddSum << " " << evens << " " << odds;
return 0;
}

继续从输入中获取数字,if num < 0然后break并显示结果,else检查数字是odd还是even并增加相应的柜台。

答案 1 :(得分:-2)

你永远不会让你的循环中setState为正。你所做的就是改变其他变量。如果已经为负数,您也无需将num重新分配给num

您需要添加以下内容:

-1

答案 2 :(得分:-2)

循环的while部分将一直持续到输入否定答案为止。你从哪里得到你的数字?用户输入?你的声明已经使它为0,这使得你的while循环继续,因为条件是&gt; =。如果你想要用户输入,那么应该有一个cout语句继续你的cin。