為什么輸出的全是“成績為優”
#include<stdio.h>
#include<iostream>
int main() {
int a;
std::cin >> a;
if (90 <= a <=100) {
printf("成績為優!");
}
else if (75<= a <90) {
printf("成績為良!");
}
else if (60<= a < 75) {
printf("成績為中!");
}
else if(0 <= a <60) {
printf("成績為差!");
}
return 0;
}
2024-01-07
因為慕課網這個運行程序沒有終端,也就是說程序在執行到 std::cin >> a; 這句代碼的時候沒辦法獲取輸入,所以變量 a 應該沒有被賦值,也就是說它的值是個隨機值,可以把它的值打印出來:

可以看到變量 a 的值是 21990,是大于 90 的,另外“輸出的全是優”這個問題的關鍵在于:
在 C++ 中,部分數學判斷表達式是不能直接寫的,不符合程序語法,例如:
90 <= a <= 100 就是個錯誤的寫法,正確的寫法是:a >= 90 && a <= 100 。

你的 “90 <= a <= 100?”的寫法其實相當于一個表達式,即:(90 <= a) <= 100。程序執行時候是從左向右讀取和執行的,所以先會讀取?90 <= a 的結果,因為 a = 21990 是 >= 90 的,所以?(90 <= a) 的值就是 1,而 1 <= 100 又是 true,所以最終的結果是 1,因為條件為真,所以會執行到這個分支。
同時,由于 if-else 分支的語法特性,只會執行一個分支,所以在 if 條件為真的時候,只會執行 if 分支,其他的 else if 和 else 分支就不會執行了,所以導致了?“輸出的全是優”。
可以自己打印下這個結果看下: