1. 程式人生 > >C++使用string.getline()和cin混合輸入的問題(cin清空快取)

C++使用string.getline()和cin混合輸入的問題(cin清空快取)

要從控制檯輸入一行字串(可能含空格)的時候,一般常用兩個getline,一個是string裡的,一個是cin裡的

string的getline(cin, str)直接把輸入存到string物件中,更為方便(cin的getline接受的是*char)

若要求先輸入一行(使用string的getline),再輸入一個其他的什麼東西(使用cin),如下程式碼所示,可能會亂。第一次輸入顯示正常,第二次輸入的時候getline得到空字串,cin得到字串的第一個字元,猜測原因是cin留下了一個回車,這個回車被getline接收了

int main() {

    string s;
    char c;
    while(getline(cin, s)){
        cin >> c;
        cout << "String : " << s << endl;
        cout << "Char   : " << c << endl;
    }
    return 0;
}

解決方法就是在cin之後,getline之前清空cin緩衝區,使用cin.sync(),如下所示

int main() {

    string s;
    char c;
    while(getline(cin, s)){
        cin >> c;
        cout << "String : " << s << endl;
        cout << "Char   : " << c << endl;
        cin.sync();
    }
    return 0;
}

至此程式達到目的。使用編譯器為MinGW。