我有以下代码:
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缓冲区?如果可能的话。
感谢
答案 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
并且它会停止在那里输入。