看板 C_and_CPP 關於我們 聯絡資訊
#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
tinlans:cin 的 buffer 裡還殘留著不正確的 input string。 09/05 17:51
bil193:謝謝一樓的提示 我在#1A1uERp0 找到解決的辦法了 09/05 18:32
bil193:cin.clear(); cin.sync(); 再加上sync()函數 就可以清空 09/05 18:32
bil193:cin的buffer了 09/05 18:32
bil193:我有個疑惑,在cppreference網站裡 並沒有sync()這個函數 09/05 18:33
bil193:只有sync_with_stdio() 請問這是不是表示"不建議再使用 09/05 18:33
bil193:sync()函數"了呢? (雖然目前compiler還可以跑啦) 09/05 18:34