在另一个输入请求c ++之前清除cin缓冲区

时间:2014-05-17 15:56:13

标签: c++ input cin

我有以下代码:

int choice = 0;
char st1[N];

cout << "enter choice" <<endl;
cin >> choice;

cout << "enter sentence" << endl;
cin.get(st1, N-1);

当到达cin.get行时,无论输入是什么,它都会读取\ 0 char到st1 [0] 就是这样。

我认为它与最新的cin(选择变量)有关。

如何在获取用户的新输入之前“清理”cin缓冲区?如果可能的话。

感谢

3 个答案:

答案 0 :(得分:3)

您可以使用ignore从缓冲区中删除换行符(例如,在换行符之前删除X字符作为分隔符)。提取分隔符时提取并忽略停止。

e.g。

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

还相关:Why would we call cin.clear() and cin.ignore() after reading input?

答案 1 :(得分:0)

您可以随时尝试使用cin.sync()

答案 2 :(得分:-1)

getchar()之后执行cin >> choice;。这将消耗输入缓冲区中的\n

由于choice的类型为int,因此\n会在缓冲区中遗留下来,并且在输入字符串时会遇到此\n并且它会停止在那里输入。