為什么輸出的全是“成績?yōu)閮?yōu)”
#include<stdio.h>
#include<iostream>
int main() {
int a;
std::cin >> a;
if (90 <= a <=100) {
printf("成績?yōu)閮?yōu)!");
}
else if (75<= a <90) {
printf("成績?yōu)榱迹?);
}
else if (60<= a < 75) {
printf("成績?yōu)橹校?);
}
else if(0 <= a <60) {
printf("成績?yōu)椴睿?);
}
return 0;
}
2024-01-07
因?yàn)槟秸n網(wǎng)這個(gè)運(yùn)行程序沒有終端,也就是說程序在執(zhí)行到 std::cin >> a; 這句代碼的時(shí)候沒辦法獲取輸入,所以變量 a 應(yīng)該沒有被賦值,也就是說它的值是個(gè)隨機(jī)值,可以把它的值打印出來:

可以看到變量 a 的值是 21990,是大于 90 的,另外“輸出的全是優(yōu)”這個(gè)問題的關(guān)鍵在于:
在 C++ 中,部分?jǐn)?shù)學(xué)判斷表達(dá)式是不能直接寫的,不符合程序語法,例如:
90 <= a <= 100 就是個(gè)錯(cuò)誤的寫法,正確的寫法是:a >= 90 && a <= 100 。

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