C ++评分系统

时间:2013-04-26 12:00:45

标签: c++ if-statement while-loop

所以我试着用C ++做一个成绩系统。例如,A +将给出4.0,A给出4.0,A-给出3.7。对于每个+ - 有0.3的差异。这是我的代码:

        char grade_letter[3];
float value; 
bool input = true;

do{
    cout << "Enter letter grade : ";
    cin>>grade_letter;

    switch(grade_letter[0])
    {
    case 'A' : value = 4;
        break;
    case 'B' : value = 3;
        break;
    case 'C' : value = 2;
        break;
    case 'D' : value = 1;
        break;
    case 'E' : value = 0;
        break;
    }

    if(grade_letter[1]=='+'){
        value += 0.3;
    }
    else if (grade_letter[1]=='-'){
        value -= 0.3;
    }

    if (input == true){
        if(value > 4.0){
            cout << "The numeric value is " << floor(value + 0.5) << endl;
        }else if (value < 0.0){
            cout << "Grade out of range. " << endl;
        }else{
            cout<< "The numeric value is " << value <<  endl;
        }
    }else {
        cout << "Invalid input." << endl;
    }
}while(input == false);

当我尝试A + A和A-时它起作用。但是,我尝试使用A =,A /,A *,结果仍显示每个等级的默认值。验证有问题。

如果我将布尔输入默认值设置为false,它只适用于A + A-等等,只要在输入中有&#39; s和 - 。我想使用字符串和子字符串来读取输入,但如果是这样,我将重新编码所有内容。

那么,有人可以帮助我验证吗?我尝试使用charAt检查char grade_letter的长度,但是出现了错误。

提前致谢。

4 个答案:

答案 0 :(得分:2)

检查'+''-'后,您需要添加一个检查,其中没有其他字符:

if(grade_letter[1]=='+'){
    value += 0.3;
}
else if (grade_letter[1]=='-'){
    value -= 0.3;
} else if (grade_letter[1]!='\0'){
    /* Error */
}

答案 1 :(得分:1)

您从未将input设置为false。在检查第二个字符是否else后,您可能想要另一个-吗?

input = false

答案 2 :(得分:1)

您需要进行以下更改:(1)在您的交换机中添加默认设置以将输入设置为false,(2)在检查+或 - 的if语句系列中添加else以便如果有除了字符串结尾之外的某些字符,输入将被设置为false,以及(3)在检查输入为真之后将+或 - 符号上的检查移动到。

char grade_letter[3];
float value; 
bool input = true;

do{
    cout << "Enter letter grade : ";
    cin>>grade_letter;

    switch(grade_letter[0])
    {
    case 'A' : value = 4;
        break;
    case 'B' : value = 3;
        break;
    case 'C' : value = 2;
        break;
    case 'D' : value = 1;
        break;
    case 'E' : value = 0;
        break;
    default:
        input = false;
        break;
    }

    if (input == true){
        if(grade_letter[1]=='+'){
            value += 0.3;
        }
        else if (grade_letter[1]=='-'){
            value -= 0.3;
        } else if (grade_letter[1]){
            // something other than end of string so bad input
            input = false;
        }
        if (input) {
            if(value > 4.0){
                cout << "The numeric value is " << floor(value + 0.5) << endl;
            }else if (value < 0.0){
                cout << "Grade out of range. " << endl;
            }else{
                cout<< "The numeric value is " << value <<  endl;
            }
        }
    }
    if (! input) {
        // at some point we have bad input so let user know.
        cout << "Invalid input." << endl;
    }
}while(input == false);

答案 3 :(得分:0)

所以,你在验证中错过了两个地方。

首先,成绩信:

switch(grade_letter[0])
{
case 'A' : value = 4;
    break;
case 'B' : value = 3;
    break;
case 'C' : value = 2;
    break;
case 'D' : value = 1;
    break;
case 'E' : value = 0;
    break;
default: 
    valid = false;  // What we don't recognize is invalid
    break;
}

然后是第二部分验证:

if (valid)  // continue verification only if valid
{
    switch(grade_letter[1])
    {
    case '+': value += 0.3; break;
    case '-': value -= 0.3; break;
    case ' ': 
    case '\0': break; // we assume space and EOL is OK
    default: valid = false; break;
    }
}