GPA计算器的If语句问题

时间:2018-07-03 14:41:19

标签: c++

在使用GPA计算器之前,即使在用户要求输入成绩输入 成绩“ B” 时,我仍在运行程序时遇到的问题GPA仍然给出5的输出,这应该不是。

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    string course;
    int courses;
    int a_ = 1;
    int units;
    int gp = 0;
    int tgp = 0;
    int totalunits = 0;
    string grade;
    float gpa;

    cout << "How many courses offered" << endl;
    cin >> courses;
    while (a_ <= courses){
        cout << "Type the course code" << endl;
        cin >> course;
        cout << "Units allotted to the course" << endl;
        cin >> units;
        cout << "Input Grade " << endl;
        cin >> grade;
        if (grade == "A" || "a"){
            gp = units * 5;
        }
        else if (grade == "B" || "b"){
            gp = units * 4;
        }
        else if (grade == "C" || "c") {
            gp = units * 3;
        }
        else if (grade == "D" || "d") {
            gp = units * 2;
        }
        else if (grade == "E" || "e") {
            gp = units * 1;
        }
        else if (grade == "F" || "f") {
            gp = units * 0;
        }
        else {
            cout << "Incorrect details, Re-Input them." << endl;
        }


        tgp = tgp + gp;
        totalunits = totalunits + units;
        ++a_;

    }
    gpa = tgp/totalunits;
    cout << tgp << endl;
    cout << totalunits << endl;
    cout << "Your GPA is : " << gpa << endl;
}

由于我遇到的错误,将switch语句更改为if语句。

4 个答案:

答案 0 :(得分:3)

如果强制使用大写字母,它将简化所有内容。

char grade;
cin >> grade;
grade = toupper(grade);
gp = units * ('F' - grade);

答案 1 :(得分:2)

尝试一些转换功能,例如:

int points_from_grade(char grade) {
    if (isupper(grade)) {
        return 5 - (grade - 'A');
    } else { // islower
        return 5 - (grade - 'a');
    }
}

答案 2 :(得分:1)

关于C ++中的字符,需要注意的一件有趣的事是它们具有一个关联的数值,可以用于数学运算。

知道了这一点,您可以完成设置的一种方法是,将字符“ A”的十进制ASCII值(即65)减去60,从而获得所需的整数值字母等级。

例如:

cout << 'A' - 60;

将输出整数'5'。

如果用户输入的是小写字母“ a”,则需要使用十进制ASCII值(即97)并减去92。

遵循该架构,您应该能够弄清楚需要进行哪些更改才能使您的程序以所需的方式工作。

作为参考,可以在这里找到完整的ASCII表和说明:https://www.asciitable.com/

答案 3 :(得分:0)

您可以将switch语句更改为以下形式:

// Relevant code parts

const int GRADE_A_POINTS = 5;
const int GRADE_B_POINTS = 4;
// etc.

char grade;
cin >> grade;

switch (grade) {
    case 'A':
    case 'a':
        gp = units * GRADE_A_POINTS;
        break;

    case 'B':
    case 'b':
        gp = units * GRADE_B_POINTS;
        break;

    // etc.
}