[問題] if內的判斷

看板C_and_CPP (C/C++)作者 ( )時間12年前 (2014/03/06 12:08), 編輯推噓4(407)
留言11則, 6人參與, 最新討論串1/1
這是考題所以是故意這樣出的 int a; if( (a=0) >0) printf("1"); else printf("0"); 簡化之後大概是這樣的問題 我自己用程式跑 如果assign給a的值比0大則if內為true印出1 若給a的值比0小則if內為false印出0 我記得C的部分只要if內回傳結果非0就會是true,回傳0才會是false 系統預設的話若true回傳1 ,false回傳0 我一直以為"="這個assign運算子只要可以執行就是會回傳1(因為成功被assign值了) 但現在看起來卻不是如此 想請教一下這方面的運作到底是如何? 照程式結果看if(1) true , if(0) false , if(-1) true, if(a=1) true , if(a=0) false ,if(a=-1) true 看起來如果在if內用assign運算子,assign運算子結束後會傳回被assign得那個值 所以if(a=1)變成if(1) , if(a=0)變成if(0) , if(a=-1)變成if(-1) 因此原程式中變成if(0>0) 請問是這樣嗎? 通篇有沒有哪邊觀念錯誤的? 還煩請指正 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.254.239

03/06 12:34, , 1F
a = b = 3; printf("a = %d, b = %d\n", a, b);
03/06 12:34, 1F

03/06 12:49, , 2F
???樓上是回錯篇嗎
03/06 12:49, 2F

03/06 12:53, , 3F
你的測試不就告訴你結果了嗎
03/06 12:53, 3F

03/06 12:54, , 4F
(a=5) 5>0 所以印1阿
03/06 12:54, 4F

03/06 13:18, , 5F
"但現在看起來卻不是如此" 所以看起來到底是怎樣啊??
03/06 13:18, 5F

03/06 13:21, , 6F
"="這個assign運算子只要可以執行就是會回傳1 →這段錯了啊
03/06 13:21, 6F

03/06 13:23, , 7F
若可執行就會回傳1, 那"="什麼情況下不可執行??
03/06 13:23, 7F

03/06 13:57, , 8F
謝謝 看來的確是a=x 會回傳一個x的值了
03/06 13:57, 8F

03/06 17:22, , 9F
樓上 應該是回傳 a 的值
03/06 17:22, 9F

03/06 19:42, , 10F
阿對~謝謝你的指正
03/06 19:42, 10F

03/13 09:58, , 11F
C++ 傳 a 的左值 C 是傳 a 的右值
03/13 09:58, 11F
文章代碼(AID): #1J5_IqJ- (C_and_CPP)
文章代碼(AID): #1J5_IqJ- (C_and_CPP)