[問題] cin的合法性檢查

看板C_and_CPP (C/C++)作者 (尹彧)時間13年前 (2013/03/24 21:03), 編輯推噓5(504)
留言9則, 4人參與, 最新討論串1/1
剛學C++,在寫一些範例 一開始有宣告 int a; 然後cin >> a; 如果我輸入char或是float整個程式就會崩潰 爬文有爬到可以用cin.fail()當條件去做迴圈 重新設定cin的讀取狀態跟留下的垃圾 但是這只解決了輸入char的部分 如果我輸入float程式一樣崩潰給我看... 稍微Google了一下 很多問答都說這樣子會把整數部分存入影響準確度 但似乎沒人提到這樣會讓程式崩潰... (我是做猜數字遊戲) do { cout << "輸入猜測次數額度:"; cin >> round; while(cin.fail()) { cin.clear(); cin.sync(); } if (round<1) cout << "猜的次數必須是數字且大於1,請重新輸入\n\n"; }while (round<1); 執行後如果輸入小數,整個迴圈就跑到爆掉 不斷的在螢幕上印出 "猜的次數必須是數字且大於1,請重新輸入" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.224.106.185

03/24 22:14, , 1F
改成輸入STRING 輸入完再去做判斷?
03/24 22:14, 1F
不太懂,我試試~3Q

03/24 22:32, , 2F
sync()那行改成:
03/24 22:32, 2F

03/24 22:32, , 3F
cin.ignore( numeric_limits<streamsize>::max(), '\n' );
03/24 22:32, 3F
依舊無法,一樣處於迴圈爆走狀態 QQ ※ 編輯: LSEG 來自: 36.224.106.185 (03/24 23:16)

03/25 00:03, , 4F
用string讀取檢查是否為字元 然後擷取小數點左邊的數
03/25 00:03, 4F

03/25 00:05, , 5F
喔..之前寫的跟你的不太一樣,看來還是用strtol來轉比較方便~
03/25 00:05, 5F

03/29 00:03, , 6F
太快判斷 cin.fail() 了,來不及更新
03/29 00:03, 6F

03/29 00:04, , 7F
cin >> round; 下一行馬上 cin.sync();
03/29 00:04, 7F

03/29 00:05, , 8F
之後在判斷 if( cin.fail() ){ cin.clear(); }
03/29 00:05, 8F

03/29 00:10, , 9F
我好像搞錯了...
03/29 00:10, 9F
文章代碼(AID): #1HJlcHa2 (C_and_CPP)
文章代碼(AID): #1HJlcHa2 (C_and_CPP)