【发布时间】:2015-07-26 05:43:49
【问题描述】:
我们只对 [0,100] 范围内的 # 感兴趣。可能有超出范围 [0, 100] 的数字,但它们不是我们计算的一部分(即可以输入低于 0 和高于 100 的数字,但在计算和计数器中将被忽略)。 假设我们将 ABCDF 指定为 [85,100]:一个 [75,85): B [65,75): C [55,65): D [0,55): F 对于五个字母等级中的每一个,输出该等级的分数,如果分数不为0,则输出该等级的平均分数。另外,如果有效分数(in [0, 100])不为0,则输出所有分数的平均值
我遇到了这个循环问题。当我输入多个分数时,它会错误地循环它们并为每个输入输出两组分数,而不是上面显示的示例答案。另外,我不确定输入单词时是否正确放置了中断以退出程序。任何帮助将不胜感激!
这是我的代码:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <string>
using namespace std;
int main(){
double scores;
unsigned countA = 0;
unsigned countB = 0;
unsigned countC = 0;
unsigned countD = 0;
unsigned countF = 0;
char grade;
double sumA = 0, sumB = 0, sumC = 0, sumD = 0, sumF = 0;
cout << "Enter scores: ";
for (scores; cin >> scores;){
if (scores > 85 && scores <= 100){
grade = 'A';
countA++;
sumA += scores;
}
else if (scores > 75){
grade = 'B';
countB++;
sumB += scores;
}
else if (scores > 65){
grade = 'C';
countC++;
sumC += scores;
}
else if (scores > 55){
grade = 'D';
countD++;
sumD += scores;
}
else{
grade = 'F';
countF++;
sumF += scores;
}
if (!cin){
break;
}
if (countA == 0){
cout << "# A's: 0 " << endl;
}
else {
cout << "# A's: " << countA << " Average = " << sumA/countA << endl;
} if (countB == 0){
cout << "# B's : 0 " << endl;
}
else{
cout << "# B's: " << countB << " Average = " << sumB /countB << endl;
} if (countC == 0){
cout << "# C's: 0 " << endl;
}
else{
cout << "# C's: " << countC << " Average = " << sumC /countC << endl;
} if (countD == 0){
cout << "# D's: 0 " << endl;
}
else {
cout << "# D's: " << countD << " Average = " << sumD /countD << endl;
} if (countF == 0){
cout << "# F's: 0 " << endl;
}
else {
cout << "# F's: " << countF << " Average = " << sumF /countF << endl;
}
}
【问题讨论】:
-
我修改了我的代码,删除了最后的一堆 if 和 else 语句:cout
-
我不明白你在说什么问题是,尽量清楚一点。但我可以看到
for (scores; cin >> scores;){应该是while (cin >> scores){而if (!cin){ break; }是不必要的(如果永远不会是真的)并且应该被删除。 -
Swap
for (scores; cin >> scores;)forwhile (cin >> scores)做同样的事情(循环直到输入非双精度的内容),但更简洁。if (!cin)不需要。并且循环缺少终止括号,使其余代码成为循环的一部分。而且不编译,但你不能总是赢。 -
@user4581301,你应该这样回答,你显然是对的。
-
我的意思是让我说我在我的程序中输入 3 个分数。 96 98 99. 我的程序应该输出“#As: 3 Average = 97.6667”,但它会一次输出每个数字,其中 #As 始终为 1,平均值始终为输入的数字。我也做了这些更改,但它仍然显示相同的格式。我认为这可能是一个大括号问题,但不完全确定@user4581301
标签: c++ loops for-loop while-loop