以上代碼第一個if後面的內容永遠被執行。 這裡需要考慮到優先順序問題,一般而言,算數運算>關係運算>邏輯運算>位運算>賦值運算。 上面代碼中,m==1返回false,false與3進行"或"運算,3被視為true。結果返回true.同理最後返回true,所以if後的語句就一直被執行了。 常見的還有下麵 ...
m = 4;
if (m == 1||3||5||7||8||10||12) { d++; if (d > 31& m==12) { y++; m=1; d=1; } }
以上代碼第一個if後面的內容永遠被執行。
這裡需要考慮到優先順序問題,一般而言,算數運算>關係運算>邏輯運算>位運算>賦值運算。
上面代碼中,m==1返回false,false與3進行"或"運算,3被視為true。結果返回true.同理最後返回true,所以if後的語句就一直被執行了。
常見的還有下麵這種情況
if (1< 4 & 4< 3) { cout << "if 被執行了"; }
同級運算符,從左往右依次計算;1<4返回true ,true與3比較,相當於1與3比較,結果仍為true.
可以這樣改寫
if (1< 4 & 4 < 3) { cout << "if 被執行了"; }
反思:還是受到自然語言的影響太大了,往往不會註意到這些細節。牢記運算的優先順序,註意細節,準程式員的電腦之路還很漫長。