Getline()总是接受输入
Getline() always takes input
我正在从我的网络摄像头捕捉视频,如果用户按下回车键,我就拍照。然后我问用户"图片还可以吗?"并等待输入。如果他说"不",我就继续做同样的事情,直到他说"是"。
但是如果他说"没有",同时我在终端上输入了一些东西,getline()函数会将我输入的任何东西写入它的缓冲区,当我再次问这个问题时,它直接进入"无效输入"状态。
如何预防?
我读了很多关于这个的问题,我试着在调用getline()之前/之后使用cin.ignore()和cin.clear(),但是它们没有帮助。
// Do capturing here
string choice;
int choiceIsOkay = 0;
while (choiceIsOkay == 0)
{
cout << "Is the picture okay? (Y/N): ";
getline(cin, choice);
if ((choice == "Y") || (choice == "y"))
{
choiceIsOkay = 2;
}
else if ((choice == "N") || (choice == "n"))
{
choiceIsOkay = 1;
}
else
{
cout << "nInvalid inputn";
choiceIsOkay = 0;
}
}
if (choiceIsOkay == 2)
{
runAlgorithm = 1;
break;
}
else choiceIsOkay = 0;
如果我理解你的问题,如果用户输入Some Random Text In
,你的程序总是跳到"无效输入",永远不会停止等待用户输入。下面的代码应该可以解决您的问题。
#include <iostream>
#include <string>
using namespace std;
int main()
{
int runAlgorithm;
// Do capturing here
int i = 0;
while (i++ < 3)
{
int choiceIsOkay = 0;
string choice;
while (choiceIsOkay == 0)
{
cout << "Is the picture okay? (Y/N): ";
getline(cin, choice);
if ((choice == "Y") || (choice == "y"))
{
choiceIsOkay = 2;
}
else if ((choice == "N") || (choice == "n"))
{
choiceIsOkay = 1;
}
else
{
cout << "nInvalid inputn";
choiceIsOkay = 0;
}
// Ignore to the end of line
cin.clear();
}
}
return 0;
}
相关文章:
- 当用户键入分隔符时,停止getline()输入
- 我有三个 getline,但是一旦编译,输入就太多了
- std::getline没有在while循环中重新请求用户输入
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- 如何将 getline 与标准输入一起使用?
- 使用 cin 或 getline() 输入空值
- 使用 getline 从输入文件打印时如何忽略空白行
- 对c++中的输入使用getline函数时忽略第一个字符
- 如果用户输入的输入大于 char 数组,则 cin.getline 会跳过输入提醒
- 虽然带有 getline 的循环不会因用户输入而结束
- 有没有办法将 getline() 与外部文本文件一起使用,然后重新获得 cin 的控制权以从控制台获取输入?
- C++ - 重复 std::getline() 作为用户整数输入?
- 无法使用 getline() 输入字符串.它只读取一个字符串
- 如何使用 std::in 和 getline() 检测后台进程中从 bash 注入的输入
- 使用 getline 从输入文件读取一行到输出文件
- C :使用getline从文本文件中输入,要么跳过第一行,要么将其余部分弄乱
- 使用 getline 忽略用户输入中的制表符和换行符
- 递归 cin.getline() 不想要求输入
- 如何阻止 cin.getline() 导致控制台在找不到分隔符时重复获取用户输入?
- cout在获取行输入(getline)后无法在c++中工作