一小段C程設 - 電腦

Table of Contents

#includeintmain(){intnum1=123;intnum2=456;intnum3=789;if(num3>num2>num1)printf("yes");elseprintf("no");return0;}想請問為何最後輸出為"NO"?但如果If條件式中只有兩變數比較就會printf:yes。。謝謝...Showmore

All Comments

Bennie avatarBennie2015-05-17
板大可以在程式當中加入printf("%d\n",num3>num2);printf("%d\n",num3num2>num1是由左到右執行num3>num2的執行結果是true也就是1接著電腦會拿num3>num2的結果(也就是1)與num1做比較所以1>num1的結果為false也就是0所以最後會輸出no2015-05-1414:58:26補充:@_@true這個關鍵字的值本來就是1>這個運算子的傳回
Andy avatarAndy2015-05-17
我記得DennisRichie有跟我說過為了避免有人寫((a==b)==(c==d))而產生困擾他提議了:==1false==0我還沒看過編譯器的實做設定不是1的過2015-05-1507:07:50補充:我想UFO誤會我的意思.我是說所有的邏輯操作員==!=>>=...等等都會保證回{0,1}連!0都是一樣只有醬,才可以保證(a>b)==(c>d)的正確所以:if(a==b)++c;也有人寫成c+=
Olive avatarOlive2015-05-17
1.這程式碼最後的輸出結果不一定是"no",事實上會依據編譯器的實做而可能會是"yes"。雖說大部分的編譯器幾乎都會執行為"no"的結果,但我們仍稱這個結果為"不可預期的"。2.你這樣寫,編譯器都沒有抱怨一下嗎?2015-05-1301:55:28補充:不要教壞小朋友!num3>num2的執行結果是true,