C++ C++;成绩计算器问题

C++ C++;成绩计算器问题,c++,C++,我需要帮助,试图找出我的成绩计算器的问题。当用户插入他们的字母等级(如“A或A”)时,程序工作。输出为4.0。但我遇到的问题是,当用户在字母等级中插入“a+或a-”“+或-add是0.3或-0.3”时,它不会增加加号或减号的值 以下是我所拥有的: const double Plus = 0.3; const double Minus = 0.3; /** * Letter grades are A, B, C, D, and F, possibly followed by + or –.

我需要帮助,试图找出我的成绩计算器的问题。当用户插入他们的字母等级(如“A或A”)时,程序工作。输出为4.0。但我遇到的问题是,当用户在字母等级中插入“a+或a-”“+或-add是0.3或-0.3”时,它不会增加加号或减号的值

以下是我所拥有的:

const double Plus = 0.3;
const double Minus = 0.3;



/**
 * Letter grades are A, B, C, D, and F, possibly followed by + or –. 
 * Their numeric values are 4, 3, 2, 1, and 0. In our scheme, there is no F+ or F–, 
 * or A+. Adding a + to the grade increases the numeric value by 0.3, a – decreases it 
 * by 0.3.
 *
 * Input: The letter of Grade with + or -.
 * Output: The value of inserted grade.
 *
 * @param cin the standard input stream.
 * @param cout the standard output stream.
 * @return 0 for success.
 */
int run(istream& cin, ostream& cout)
{
    // Enter your letter grade: C+
    //Grade value is[2.3]
    char list [26] = { "A, B, C, D, F, a, b, c, f" };
    char grade;
    double value;

    cout << "Enter your letter grade: ";
    cin >> grade;

    cout << fixed << setprecision(1);

    if ((grade == 'A' || grade == 'a')){
        value = 4.0;
    }
    else if ((grade == 'A+') || (grade == 'a+')){
        value = 4.0 + 0.3;
    }
    else if (grade == 'A-' || grade == 'a-'){
        value = (4.0 - Minus);
    }
    else if (grade == 'B' || grade == 'b'){
        value = 3.0;
        if (grade == 'B+' || grade == 'b+'){
            value = (3.0 + Plus);
        }
        else if (grade == 'B-' || grade == 'b-'){
            value = (3.0 - Minus);
        }
    }
    else if (grade == 'C' || grade == 'c'){
        value = 2.0;
        if (grade == 'C+' || grade == 'c+'){
            value = (2.0 + Plus);
        }
        else if (grade == 'C-' || grade == 'c-'){
            value = (2.0 - Minus);
        }
    }
    else if (grade == 'D' || grade == 'd'){
        value = 1.0;
        if (grade == 'D+' || grade == 'd+'){
            value = (1.0 + Plus);
        }
        else if (grade == 'D-' || grade == 'd-'){
            value = (1.0 - Minus);
        }
    }
    else if (grade == 'F' || grade == 'f'){
        value = 0.0;
        if (grade == 'F+' || grade == 'f+'){
            value = (0.0 + Plus);
        }
        else if (grade == 'F-' || grade == 'f-'){
            value = (0.0 - Minus);
        }
    }
    else if (!(grade == list[26])){
        cout << "INVALID LETTER GRADE" << endl;
        value = 0;
    }

    cout << "Grade value is [" << value << "]" << endl;


    return 0;
}
const double Plus=0.3;
常数双负=0.3;
/**
*字母等级为A、B、C、D和F,可能后跟+或–。
*它们的数值为4、3、2、1和0。在我们的方案中,没有F+或F–,
*或者A+。将a+添加到坡度会将数值增加0.3,a–会将数值减少
*减0.3。
*
*输入:带+或-。
*输出:插入等级的值。
*
*@param是标准输入流。
*@param无法显示标准输出流。
*@return 0表示成功。
*/
内部运行(istream和cin、ostream和cout)
{
//输入你的字母等级:C+
//等级值为[2.3]
字符列表[26]={“A,B,C,D,F,A,B,C,F”};
煤焦品位;
双重价值;
cout>等级;
要使其简单化,请执行以下操作:

您的问题是等级是一个
字符
,无法存储
'a+'
(2个字符:'a','+')。
char grade
更改为
std::string grade
(请记住包含
),它应该可以正常工作。

问题是
A+
A-
是两个字符,因此不能存储在单个
char
变量中。您可以使用两个变量(尽管如果您没有输入
+
-
,这可能会有问题,因为第二个变量中没有存储内容)或使用
std::string
存储输入的内容,然后检查其中是否有
+
-

此外,为了简化所有
if
语句,您可以使用switch-case块,或者使用此技巧直接从字母grade中获取分数点

大写字母:
gradePoint=4.0-(字母-'A')

对于小写字母:
gradePoint=4.0-(字母-'a')


只需注意,您必须包含一个单独的检查和
F
,因为
E
会被跳过分数。

char grade
,所以它只会捕获a+中的
a
。您需要在启用所有警告的情况下进行编译。。a+有多少个字符?最好使用开关大小写。。错误太多…您的代码永远不会选中+或-您的注释是:
'f-'