[問題] C++的IO問題 clear()無效!?

看板C_and_CPP作者 (丁丁)時間14年前 (2009/09/05 16:34), 編輯推噓0(007)
留言7則, 2人參與, 最新討論串1/1
#include<iostream> #include<string> #include<stdexcept> using namespace std; int main() { int v; while(cin>>v, !cin.eof()) { if(cin.bad()) throw runtime_error("IO stream corrupted"); if(cin.fail()) { cout<<cin.eof()<<cin.fail()<<cin.bad()<<endl; cin.clear(); cout<<cin.eof()<<cin.fail()<<cin.bad()<<endl; cout<<"bad data, try again:"<<endl; continue; } cout<<"value of v:"<<v<<endl; } system("pause"); return 0; } 這是我照書中範例練習的 我不懂為何我輸入 1234[enter] :印出value of v:1234 (成功) d[enter] :產生無窮迴圈 (失敗) 把"d"給予整數變數,failbit變成1,所以會進入if(cin.fail())的區塊裡 我在裡面用cin.clear() 理應failbit、eofbit、badbit都變成0 而在cout時也用endl清空buffer 為什麼還會造成endless loop呢?? (我是學C++ Primer 4/e中文版的 不曉得哪裡有問題 懇請各位指導一下:) ) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.6.13.94

09/05 17:51, , 1F
cin 的 buffer 裡還殘留著不正確的 input string。
09/05 17:51, 1F

09/05 18:32, , 2F
謝謝一樓的提示 我在#1A1uERp0 找到解決的辦法了
09/05 18:32, 2F

09/05 18:32, , 3F
cin.clear(); cin.sync(); 再加上sync()函數 就可以清空
09/05 18:32, 3F

09/05 18:32, , 4F
cin的buffer了
09/05 18:32, 4F

09/05 18:33, , 5F
我有個疑惑,在cppreference網站裡 並沒有sync()這個函數
09/05 18:33, 5F

09/05 18:33, , 6F
只有sync_with_stdio() 請問這是不是表示"不建議再使用
09/05 18:33, 6F

09/05 18:34, , 7F
sync()函數"了呢? (雖然目前compiler還可以跑啦)
09/05 18:34, 7F
文章代碼(AID): #1AeYA3e2 (C_and_CPP)