C++使用string.getline()和cin混合輸入的問題(cin清空快取)
阿新 • • 發佈:2018-12-30
要從控制檯輸入一行字串(可能含空格)的時候,一般常用兩個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。