2016-11-15 67 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'爲true或**'scoreGrade <= 100',則該條件將被評估爲true。所以,舉例來說,如果'scoreGrade'是1000000,那麼將會是真的,如果'scoreGrade'是-1000000000000,我會是真的。你可能想要的是給出一個「A」,如果它在90到100之間,但這不是正確的做法。我不會告訴你正確的方法,因爲我認爲這對你來說是一個很好的挑戰。 – nbro

回答

2

您的條件每次都被評估爲真。

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

無論輸入什麼值,評估爲true。這就是說,如果該值大於或等於90或值小於100.應該使用運算符而不是||來代替|| || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || || ||)。這會將語句更改爲大於或等於90並且該值小於100

+0

謝謝你向我解釋這件事,它幫助我瞭解發生了什麼事。改變我的邏輯運算符爲&&解決它。 – red

+0

沒問題。如果這個答案確實是一個解決方案,請點擊檢查。 – TyAnthoney

相關問題