close
標題:

一小段C程設

發問:

#include int main (){ int num1 =123; int num2 =456; int num3 =789; if (num3 > num2 > num1) printf("yes"); else printf("no"); return 0; } 想請問為何 最後輸出為"NO"? 但如果If 條件式中只有兩變數比較 就會printf: yes。。 謝謝

最佳解答:

板大可以在程式當中加入 printf("%d ", num3>num2); printf("%d ", num3num2>num1 是由左到右執行 num3>num2的執行結果是true也就是1 接著電腦會拿num3>num2的結果(也就是1)與num1做比較 所以1>num1的結果為false也就是0 所以最後會輸出 no 2015-05-14 14:58:26 補充: @_@ true 這個關鍵字的值本來就是 1 > 這個運算子的傳回結果也是 1 啊 真的沒看過不是 1 的。 https://msdn.microsoft.com/en-us/library/yf3abyat(v=vs.80).aspx 2015-05-14 15:00:07 補充: 可參考 https://msdn.microsoft.com/en-us/library/yf3abyat(v=vs.80).aspx 以及 https://msdn.microsoft.com/en-us/library/eke1xt9y.aspx 2015-05-14 15:03:53 補充: 另外請問一下我的知識等級為何是 ( ) 我都已經收到知識+的啟動信了,啟動按鈕也按了,怪怪的 @_@

aa.jpg

 

此文章來自奇摩知識+如有不便請留言告知

其他解答:

我記得Dennis Richie 有跟我說過 為了避免 有人寫 ((a==b) == (c==d))而產生困擾 他提議了: == 1 false == 0 我還沒看過 編譯器的實做 設定 不是 1 的過 2015-05-15 07:07:50 補充: 我想UFO誤會我的意思. 我是說所有的 邏輯操作員 == != > >= ... 等等 都會保證回 {0,1} 連 !0都是一樣 只有醬,才可以保證 (a>b) == (c>d) 的正確 所以: if (a==b) ++c; 也有人寫成 c+=(a==b);|||||1. 這程式碼最後的輸出結果不一定是 "no",事實上會依據編譯器的實做而可能會是 "yes"。雖說大部分的編譯器幾乎都會執行為 "no" 的結果,但我們仍稱這個結果為 "不可預期的"。 2. 你這樣寫,編譯器都沒有抱怨一下嗎? 2015-05-13 01:55:28 補充: 不要教壞小朋友! num3>num2的執行結果是true,但不一定是1,實際上看編譯器的實做。 2015-05-13 13:01:40 補充: 這是一種習慣。 有很多C函式會把指標當作布林值傳回(可能是效率考量吧),這時候用 func() == true 的寫法會出問題的! 所以預設 true 為某個值、或是 true 和 true 一定相等的想法會要命。 2015-05-14 17:10:08 補充: C語言從前沒有Boolean型態(C11才加入),他規定所有可以被轉化成整數的東西都可為邏輯值,並定義零為False;非零為True。 C語言一直到C11以前也沒有true和false這兩個東西,這通常是由各家編譯器自己做出來的,而且通常會定義true為1。所以「通常true即為1」的說法是正確的,但「true一定為1」的說法就有問題了! MSDN上的東西僅能當作Visual C++的行為參考,不一定能套用到其他編譯器,或C語言的標準行為。D4CDE60C03A2F1BC
arrow
arrow

    ddhdxb5 發表在 痞客邦 留言(0) 人氣()