[問題] 將cin放進while的判斷式

看板C_and_CPP (C/C++)作者 (Lucius)時間15年前 (2010/08/05 15:12), 編輯推噓0(008)
留言8則, 2人參與, 最新討論串1/1
請教兩個cin觀念的問題 我有問題的code如下 int choice=0; while( (choice=getChoice()) != 0) { cout<<"hello"<<endl; } int getChoice() { int c=0; cin>>c; return c; } 當cin時給int都可以正常運作 但若故意在cin時給char, 為何會產生無限loop? (我以為會是char轉成int非 0, 印一次hello, 再回到while判斷) 另外一個問題是我改用 while(cin>>choice != 0) 當判斷 反而是給char不會進loop, 又是為什麼呢 (>>會傳回istream的cin, 是嗎? 這個cin非int 0不是該進loop嗎?) 可能有很多觀念錯誤的地方..煩請指教, 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.128.66 ※ 編輯: jehovah 來自: 210.69.128.66 (08/05 15:13)

08/05 15:20, , 1F
當讀入格式錯誤的時候, 標示錯誤的旗標會升起, 這時候
08/05 15:20, 1F

08/05 15:21, , 2F
除非你用像clear之類的函式把錯誤旗標重設, cin 不會
08/05 15:21, 2F

08/05 15:22, , 3F
讀入任何東西, >> 恆右運算元不變, 所以getChoice 回
08/05 15:22, 3F

08/05 15:22, , 4F
傳都是0
08/05 15:22, 4F

08/05 15:24, , 5F
第二個問題, 回傳 cin 會隱含轉換成 bool 型態, 無錯
08/05 15:24, 5F

08/05 15:25, , 6F
誤是回傳 true, 相反的就會結束迴圈, 這時候寫 !=
08/05 15:25, 6F

08/05 15:25, , 7F
false 是比較正確的
08/05 15:25, 7F

08/05 15:30, , 8F
謝謝這麼清楚的說明^^ 懂了
08/05 15:30, 8F
文章代碼(AID): #1CMcH9-T (C_and_CPP)
文章代碼(AID): #1CMcH9-T (C_and_CPP)