如何正確清空cin緩存

關於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;
}

測試結果爲:
result

還有一種方法是使用

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;
}

效果如下:
result

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章