我参加了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;从自动编程器。我做错了什么?
答案 0 :(得分:1)
你也在这个if (num % 2 == 0)
部分处理负数(例如:遇到第一个负整数的情况也是真的,例如-6
),从而递增evens
并添加这个负数evenSum
,根据您的问题的要求,这些数字根本没有完成;另一件事是else
部分不是必需的,我的意思是为什么将-1分配给num
而不是让它保持你刚才读的相同数字(因为它不在你的问题的要求中)。
我认为您的else if
和else
部分需要像这样更改:
#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。