【发布时间】:2018-02-04 02:32:42
【问题描述】:
我是新来的编码和初学者 C++ 课程,我真的不确定我的代码有什么问题。我把东西搬来搬去无济于事。该程序旨在询问用户字母等级以及它的 +、- 或无符号(例如 A+、A-、A)。我必须使用 switch 和 if 语句,但我不确定我的逻辑在哪里失败。
#include <iostream>
#include <string>
using namespace std;
int main()
{
char sign, letterGrade;
string gradeRange;
cout << "Enter a letter grade: ";
cin >> letterGrade;
cout << "Enter a sign (+ or -) if applicable; otherwise, enter 'x': ";
cin >> sign;
switch (letterGrade) {
case 'A': {
if (sign == '+' || sign == 'x') {
gradeRange = "greater than 93%";
}
else if (sign == '-') {
gradeRange = "greater than or equal to 90%, but less than 93%.";
}
break;
}
case 'B': {
if (sign == '+') {
gradeRange = "greater than or equal to 87%, but less than 90%.";
}
else if (sign == 'x') {
gradeRange = "greater than or equal to 83%, but less than 87%.";
}
else if (sign == '-') {
gradeRange = "greater than or equal to 80%, but less than 83%.";
}
break;
}
case 'C': {
if (sign == '+') {
gradeRange = "greater than or equal to 77%, but less than 80%.";
}
else if (sign == 'x' || sign == '-') {
gradeRange = "greater than or equal to 70%, but less than 77%.";
}
break;
}
case 'D': {
if (sign == '+' || sign == '-' || sign == 'x') {
gradeRange = "greater than or equal to 60%, but less than 70%.";
}
break;
}
case 'F': {
if (sign == '+' || sign == 'x' || sign == '-') {
gradeRange = "less than 60%.";
}
break;
}
default: {
cout << "Oops, an error occured, please try again.";
}
cout << "The student's letter grade range is " << gradeRange << endl;
}
return 0;
}
【问题讨论】:
-
代码到底有什么问题?
-
正确缩进你的代码,你会清楚地看到哪里出了问题。
-
你有最后的
cout-statement inside switch-block,这意味着它被每个break-statement 跳过。 -
这个问题很快就会变得不愉快(即,它很可能会被否决)。要从中学习:总是检查阅读您的输入!例如
if (std::cin >> letterGrade) { /* use the value */ } else { /* deal with the input error */ }. -
您也可以清理您的代码,方法是在您的案例中为“A”、“B”和“C”不以“else-if”语句结尾。对于案例“D”和“F”,您也不需要“if”语句。试试看这个调整是否适合你。