[問題] if判定小小疑問

看板C_and_CPP作者 (groot3)時間7年前 (2017/03/04 12:45), 7年前編輯推噓8(8015)
留言23則, 7人參與, 最新討論串1/1
Int s; while(~~~~){ if(s){printf(",")} else{s=1} } 小弟不太懂,這邊的if(s)是在判定什麼 跑這while 迴圈時第一次會跑去else,之後每次都會跑去printf那裏 請各位鞭小力一點>< -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.137.232.45 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1488602716.A.558.html

03/04 12:54, , 1F
會把s轉型成bool 如果0會變false 其他變true
03/04 12:54, 1F

03/04 12:55, , 2F
if內放int->非0為true
03/04 12:55, 2F
原來轉成bool,這樣懂了,感謝樓上兩位 ※ 編輯: groot3 (114.137.232.45), 03/04/2017 12:58:34 ※ 編輯: groot3 (1.161.230.132), 03/04/2017 13:45:56

03/04 14:06, , 3F
轉成book…是不是獵人看太多 :|
03/04 14:06, 3F

03/04 17:29, , 4F
C有bool嗎'@@
03/04 17:29, 4F

03/04 17:30, , 5F
其實放 if 裡面是 bool 會被轉成 int 吧...
03/04 17:30, 5F

03/04 17:32, , 6F
任何型別的值放 if 裡面會被轉成 int 判斷是否不為零
03/04 17:32, 6F

03/04 17:34, , 7F
樓上這樣的話是否能說NULL等於0
03/04 17:34, 7F

03/04 17:36, , 8F
可是 NULL 和 0 型別就不同了耶
03/04 17:36, 8F

03/04 17:40, , 9F
應該可以說轉型後相同吧
03/04 17:40, 9F

03/04 18:10, , 10F
NULL 其實是個很有趣的東西
03/04 18:10, 10F

03/04 18:10, , 11F
版上的 C 語言常見誤解對此有詳細說明, 可以去看看
03/04 18:10, 11F

03/04 18:12, , 12F
簡單說就是 NULL 和 0 之間的關係沒有你想的那麼單純
03/04 18:12, 12F

03/04 18:14, , 13F
然後 C++ 還有 nullptr, 這個也請看版上講空指標常數那一篇
03/04 18:14, 13F

03/04 18:20, , 14F
原來如此 感謝各位
03/04 18:20, 14F

03/05 04:00, , 15F
剛才找了一下跟 if 相關的東西, 我的印象沒錯
03/05 04:00, 15F

03/05 04:01, , 16F
C 的 if() 裡面是當做數值, 概念上等同於多寫一個 != 0
03/05 04:01, 16F

03/05 04:01, , 17F
這也是因為 C 語言沒有單獨的布林值, 所有判斷式都是 int
03/05 04:01, 17F

03/05 04:02, , 18F
判斷條件成立則結果為整數 1, 不成立則為整數 0
03/05 04:02, 18F

03/05 04:03, , 19F
但 C++ 由於有獨立的 bool 型態, if() 裡面是轉成 bool
03/05 04:03, 19F

03/05 04:03, , 20F
再看它究竟是 true 還是 false 決定
03/05 04:03, 20F

03/05 04:04, , 21F
所以 if(s) 在 C 約等同於 if(s!=0)
03/05 04:04, 21F

03/05 04:04, , 22F
但在 C++ 是約等同於 if((bool)s)
03/05 04:04, 22F

03/05 22:06, , 23F
度ㄉ所以才會有if(!strcmp)這樣寫法
03/05 22:06, 23F
文章代碼(AID): #1OkaPSLO (C_and_CPP)