如何正確清空cin快取
阿新 • • 發佈:2019-02-03
關於cin快取的清空,網上有各種說法。最多的是使用
cin.sync();
但是,關於這個sync方法在不同的編譯器中有不同的實現。VC中確實可以清空cin的快取,但是在GNU中,不行。因此使用sync方法是沒有通用性的。
又有說法是使用
cin.seekg(0, ios_base::end);
但是依舊無法正常工作。以下是一個測試程式碼:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a;
cin.seekg(1, ios_base::end);
cin >> b;
cout << a << ',' << b << endl;
return 0;
}
測試結果為:
還有一種方法是使用
fflush(stdin);
這種方法一般是可以成功的。但是,如果肯定只使用cin和cout,而不使用stdio的內容的話,可以加入以下語句增加輸入輸出的速度:
cin.sync_with_stdio(false);
這種情況下,fflush無法正常工作了。
最後,說一個肯定可以解決問題的方案,使用ignore方法,第一個引數表示忽略多少個字元,可以傳入第二個引數,表示直到碰到什麼字元為止。可以使用以下方案:
cin.ignore(INT_MAX, ‘\n’);
最終的解決方案示例程式碼如下:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin.sync_with_stdio(false);
cin >> a;
cin.ignore(INT_MAX, '\n');
cin >> b;
cout << a << ',' << b << endl;
return 0;
}
效果如下: