0

だから私は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- などでのみ機能します。文字列と部分文字列を使用して入力を読み取ることを考えていますが、そうであれば、すべてを再コーディングする必要があります。

それで、誰かが私の検証を手伝ってくれませんか?charAt を使用して char grade_letter の長さを確認しようとしましたが、エラーが発生しました。

前もって感謝します。

4

4 に答える 4

1

次の変更を行う必要があります: (1) スイッチにデフォルトを追加して入力を false に設定し、(2) + または - をチェックする一連の if ステートメントに else を追加して、他の文字がある場合に(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);
于 2013-04-26T12:15:54.247 に答える
1

に設定inputすることはありませんfalseelse2 番目の文字が a であることを確認した後、別の文字が-必要になる場合がありinput = falseます。

if(grade_letter[1]=='+'){
    value += 0.3;
}
else if (grade_letter[1]=='-'){
    value -= 0.3;
}
else {
    input = false;
}
于 2013-04-26T12:02:47.847 に答える