作者jehovah (Lucius)
看板C_and_CPP
標題[問題] 將cin放進while的判斷式
時間Thu Aug 5 15:12:07 2010
請教兩個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)
→ loveme00835:當讀入格式錯誤的時候, 標示錯誤的旗標會升起, 這時候 08/05 15:20
→ loveme00835:除非你用像clear之類的函式把錯誤旗標重設, cin 不會 08/05 15:21
→ loveme00835:讀入任何東西, >> 恆右運算元不變, 所以getChoice 回 08/05 15:22
→ loveme00835:傳都是0 08/05 15:22
→ loveme00835:第二個問題, 回傳 cin 會隱含轉換成 bool 型態, 無錯 08/05 15:24
→ loveme00835:誤是回傳 true, 相反的就會結束迴圈, 這時候寫 != 08/05 15:25
→ loveme00835:false 是比較正確的 08/05 15:25
→ jehovah:謝謝這麼清楚的說明^^ 懂了 08/05 15:30