【问题标题】:What's wrong with my code (c++ beginner)? [closed]我的代码有什么问题(c ++初学者)? [关闭]
【发布时间】: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 &gt;&gt; letterGrade) { /* use the value */ } else { /* deal with the input error */ }.
  • 您也可以清理您的代码,方法是在您的案例中为“A”、“B”和“C”不以“else-if”语句结尾。对于案例“D”和“F”,您也不需要“if”语句。试试看这个调整是否适合你。

标签: c++ c++11 debugging logic


【解决方案1】:

你有最终的 cout 语句 switch-block,这意味着它被每个 break-statement 跳过。

【讨论】:

    【解决方案2】:
    #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.";
    
    
        }// this is for closing switch 
        cout << "The student's letter grade range is " << gradeRange << endl;
        //u kept the cout statement in switch's block so it wouldn't work
        return 0;
    } //this is for closing main
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2019-02-06
      • 2018-06-14
      • 2017-07-31
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多