#include <stdio.h>
int main()
{
char c='w';
if((c>110 && c>120)&&(c<120 && c<200))
printf("true");
else
printf("false");
return 0;
}
這是我的代碼。代碼確實給出了輸出,但是 vscode 給了我一個警告,即字符與常量的比較(如 200,它專門顯示僅針對 200),將始終為真,但它確實成功執行了代碼并給出了最終結果,這是“假”。我在在線編譯器上嘗試了相同的代碼,在這里,在線編譯器給出了沒有任何警告的結果。
這有什么原因嗎?
uj5u.com熱心網友回復:
您已定義c為 a char,這是signed char大多數編譯器默認情況下所做的。signed char在常見系統上,a可以取的最高值是 127。這始終小于 200,IDE 會告訴您這個事實。
注意:頭檔案“limits.h”定義了標準型別的最小值和最大值。有趣的價值是在你的情況下CHAR_MAX等于SCHAR_MAX。
IDE 發出的警告可能與編譯器發出的警告不同,因為它們是不同的野獸。有些比其他“更聰明”,但是,不產生警告并不意味著構造是正確的。
uj5u.com熱心網友回復:
如果c大于 120,則始終大于 110。120 和 200 也是如此。洗掉無用的比較,警告應該會消失。
uj5u.com熱心網友回復:
有這個問題:你定義c為 a charwhich is a signed char。asigned char可以容納的最大值是127。因此,無論值如何,c < 200始終為true。
另外,如果c > 120是true,那么c > 110也是真的。同樣的事情發生。如果c < 120是,true那么c < 200也是true。
另外,請做一些適當的塊范圍和縮進。如果你不這樣做,它會回來咬你。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338875.html
