0
for(i=0; i<NUM_STUDENTS; i++)
{

    if(studentGrades[i]>=GRADE_BOUNDS[0])
    {
        cout<<"Student "<<k<<" got "<<studentGrades[i]<<" which is a(n) "<<GRADE_LETTERS[0]<<endl;
    }

    else if(studentGrades[i]<GRADE_BOUNDS[10])
    {
        cout<<"Student "<<k<<" got "<<studentGrades[i]<<" which is a(n) "<<GRADE_LETTERS[11]<<endl;
    }

    for(j=0; j<GRADE_COUNT; j++)
    {
        if(studentGrades[i]<GRADE_BOUNDS[j]&&studentGrades[i]>=GRADE_BOUNDS[j+1])
        {
            cout<<"Student "<<k<<" got "<<studentGrades[i]<<" which is a(n) "<<GRADE_LETTERS[j+1]<<endl;
            break;
        }
    }
    k++;
}

こんにちは、これはスタックオーバーフローに関する私の最初の投稿であり、質問を正確に保つように努めます。現在、プログラミングの入門段階にあるので、私のスニペットがまだ学習中の一流でない場合はご容赦ください。私は、20 人の学生の成績 (0.0 ~ 100.0) のユーザー入力を受け取るプログラムの設計を任されています。入力を受け取る for ループは正常に動作します。現在の問題は、60 未満の値 (この場合は F と見なされます) を入力すると、プログラムが「学生 k は 59 を取得しました。これは a(n ) F" を 2 回続けて入力しますが、60 を超える値を入力すると正常に動作します。なぜこうなった?このスニペットで使用されている 2 つの配列を含めます。最後の k++ は、学生の数を保持するための単なるアキュムレータ変数です。

私は当初、ネストされた for ループ内に 3 つの if ステートメントをすべて持っていましたが、最初の 2 つの if ステートメントは変数 "j" をまったく使用しないため、最初の 2 つの if ステートメントを外側のループに移動することをインストラクターが提案しました。ネストされたループ内にそれらを含める必要はありません。この変更を行うまでは問題なく動作していました。

**GRADE_LETTERS配列を含めるのを忘れて編集

const string GRADE_LETTERS[] = { "A", "A-", "B+",  "B", "B-", "C+", "C", "C-", "D+", "D", "D-", "F" };

const double GRADE_BOUNDS[] =  { 92.0, 90.0, 87.0, 82.0, 80.0, 77.0, 72.0, 70.0, 67.0, 62.0, 60.0, 0.0 };
const int GRADE_COUNT = sizeof( GRADE_BOUNDS ) / sizeof( GRADE_BOUNDS[0] );
4

2 に答える 2