2016-11-15 3 views
-2

下記のC++プログラムを実行するたびに、たとえば、84や76の等級値を入力しても、同じ出力が "A"になります。出力が常に「A」で、グレードの文字の値ではなく、数字グレードの入力に基づいていなければならない理由については混乱しています。私はそれが私のコードの中で論理的な誤りである可能性が高いことを知っていますが、私はなぜそれを理解するようです。C++:保存されたchar値を画面に表示

char letterGrade; 
int scoreGrade; 

cout << "Enter Course Name: "; 
cin >> courseName; 

cout << "Score Grade Recieved: "; 
cin >> scoreGrade; 
while (scoreGrade < 0 || scoreGrade > 100) { 
    cout << "Invalid Entry, Enter Score Grade: "; 
    cin >> scoreGrade; 
} 

if (scoreGrade >= 90 || scoreGrade <= 100) { 
    letterGrade = 'A'; 
} 
else if (scoreGrade >= 80 || scoreGrade < 90) { 
    letterGrade = 'B'; 
} 
else if (scoreGrade >= 70 || scoreGrade < 80) { 
    letterGrade = 'C'; 
} 
else if (scoreGrade >= 60 || scoreGrade < 70) { 
    letterGrade = 'D'; 
} 
else 
    letterGrade = 'F'; 

cout << letterGrade; 
+0

このような問題を解決する適切なツールはデバッガーです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

+1

私はこの状態の意味を説明しようとします: 'scoreGrade> = 90 || scoreGrade <= 100'。この条件は、 'scoreGrade> = 90'が真**または**' scoreGrade <= 100'のいずれかであると評価されます。たとえば、 'scoreGrade'が1000000で' scoreGrade'が-1000000000000であれば真となります。あなたがおそらく望むのは、90と100の間であれば 'A'を与えることですが、それは正しい方法ではありません。私は正しい方法を教えていません、なぜなら、これはあなたが把握するための素晴らしいチャレンジだと思うからです。 – nbro

答えて

2

お客様の条件は毎回真と評価されています。

if (scoreGrade >= 90 || scoreGrade <= 100) 

どの値が入力されてもtrueに評価されます。これは、値が90以上か100未満かどうかを示しています。& &演算子を||ステートメントが90以上に変更され、値が100未満です

+0

私にこれを説明してくれてありがとう、それは何が起こっていたのか理解するのを助けました。論理演算子を&&に変更しました。 – red

+0

問題ありません。この回答が本当に解決策であった場合は、小切手をクリックしてください。 – TyAnthoney