do-whileループプログラムの助けが必要ですか? (C ++)

私はユーザーの入力(マーク)を取ってこれらのマークの平均を文字グレードに出力するプログラムを作成しようとしています。 私はプログラムが正常な文字等級を出力しませんが、正常に平均を計算する取得に成功したと信じていますか?

助言がありますか? 編集:私の出力は常に "F"グレードとしてパーセンテージを与えるため、おそらく計算では何か....

// Used iomanip to display averages for possible three digit or greater answers.
#include 
#include 
using namespace std;

// Set up my program using only main()
int main()
{
    //Created the variable 'mark' so the user input can be stored and tested in the do-while condition.
    //Variable 'sum' and 'average' to calculate mark and then be tested against letter grades.
    //'counter' used to keep track of number of terms being averaged.
    double mark=0, sum=0, average=0;
    int counter=-1;

   //Do-while statement to test the loop. Gets input from user, and tests whether it is a a valid letter grade.
   //Marks below 0 or above 100 will test true and loop back re-promting the user for another mark.
   //If tested condition is false, then if statements then test the mark and output the letter grade.

    cout << "Please enter marks to calculate average, and enter -1 to stop and find letter equivalence. " << endl;

    do
    {
        if ( mark < 0 || mark > 100 )
        {
            cout << "Entered mark is invalid. Please try again, or enter -1 to stop and find letter equivalence. " << endl;
            break;
        }

        sum = sum + mark;
        counter++;
        cin >> mark;

    }
    while ( mark != -1 );

    average = sum/counter ;

    //What happens when above statement is false...
    if (mark >= 90)
        {
            cout << "The average of "<<<"% is equivalent to a letter grade of A+ ";
        }
    else if (mark >=80)
        {
            cout << "The average of "<<<"% is equivalent to a letter grade of A ";
        }
    else if (mark >=70)
        {
            cout << "The average of "<<<"% is equivalent to a letter grade of B ";
        }
    else if (mark >=60)
        {
            cout << "The average of "<<<"% is equivalent to a letter grade of C ";
        }
    else if (mark >=50)
        {
            cout << "The average of "<<<"% is equivalent to a letter grade of D ";
        }
    else
        {
            cout << "The average of "<<<"% is equivalent to a letter grade of F ";
        }
return 0;
}
0
何が問題ですか?
追加された 著者 jman,

3 答え

考慮すべき事柄のカップル:

  1. 成績には average を考慮する必要があり、 mark は考慮しないでください。マークを使用すると、do whileループを終了する最後の入力値 -1 がグレードに使用され、常にFグレードになります。

  2. do-while ループの後にすべての cout ステートメントに endl を追加します。出力ストリームがバッファされている可能性があり、これにより、coutステートメントがモニターに表示されないことがあります。 endl は出力ストリームをフラッシュします。

For eg.
cout << "The average of "<<<"% is equivalent to a letter grade of A+ " << endl;

1
追加された
私にとっては宿題のようだ。私はコードを提供しません。エディタでデバッグがサポートされている場合は、コードをステップ実行し、変数を注意深く監視します。そうでない場合は、デバッグステートメントを追加して、どこが間違っているかを確認します。
追加された 著者 srikfreak,
あなたの提案の1つで、平均計算がdo-whileループの後に来るとき、どうすればこれを達成できますか?私はコンパイラでこれを試みましたが、結果は出力されませんでしたか?ありがとう
追加された 著者 Zinidine Zidane,
私はデバッガを初めて使っていますが、いくつか試してみると、それをやり遂げて私の哀れな間違いを実感しました。D:忍耐力ありがとう、本当にありがとう!
追加された 著者 Zinidine Zidane,

ループの最後に mark は常に -1 です。すべてのテストが失敗すると、 else 句に落ちてFを出力します。修正は、 mark ではなく average をテストすることです。

0
追加された
いいえ、平均を出力する if / else if ツリーを意味します。
追加された 著者 David Schwartz,
平均値の計算がループ外にあるためにテストすることができないため、テストすることはできません。
追加された 著者 Zinidine Zidane,
if/else ifツリーは、ユーザーの入力が有効かどうかを判断するために使用されます。ifステートメントは有効なマークを入れたかどうかをテストしています。なぜ平均をテストするのかわかりません。
追加された 著者 Zinidine Zidane,
まず、謝罪、私はあなたが何を意味したのか、非常にばかげた間違いを知っています。忍耐力ありがとう、本当に感謝します!
追加された 著者 Zinidine Zidane,

if ステートメントを再度確認してください。私は正しい平均がFに等しいことをいつも見ていると賭けるだろう。

0
追加された
正しい平均値が常に「F」になるのを止めるためにあなたは何をしますか?私の平均計算では私のwhileステートメントの後にあるので、平均と以下のifステートメントをどのように比較するのか分かりません。
追加された 著者 Zinidine Zidane,