C++使用string.getline()和cin混合输入的问题(cin清空缓存)

来源:互联网 发布:游戏推荐 知乎 编辑:程序博客网 时间:2024/05/16 11:38


要从控制台输入一行字符串(可能含空格)的时候,一般常用两个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。


0 0
原创粉丝点击