Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Getline()始终接受输入_C++_Input_Cin_Getline - Fatal编程技术网

C++ Getline()始终接受输入

C++ Getline()始终接受输入,c++,input,cin,getline,C++,Input,Cin,Getline,我正在从我的网络摄像头捕获视频,如果用户点击回车键,我会拍照。然后我向用户询问“图片是否正常?”并等待输入。如果他说“不”,我会继续做同样的事情,直到他说“是” 但如果他说“不”,同时我在终端中键入了一些内容,getline()函数会将我键入的任何内容写入其缓冲区,当我再次提问时,它会直接进入“无效输入”状态 我如何防止这种情况 我读了很多关于这方面的问题,在调用getline()之前/之后,我尝试使用cin.ignore()和cin.clear(),但它们没有帮助 // Do capt

我正在从我的网络摄像头捕获视频,如果用户点击回车键,我会拍照。然后我向用户询问“图片是否正常?”并等待输入。如果他说“不”,我会继续做同样的事情,直到他说“是”

但如果他说“不”,同时我在终端中键入了一些内容,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 input\n";
            choiceIsOkay = 0;
        }
    }

if (choiceIsOkay == 2)
{
    runAlgorithm = 1;
    break;
}

else choiceIsOkay = 0;
//在这里做捕获
字符串选择;
int choiceIsOkay=0;
while(choiceIsOkay==0)
{

cout如果我理解您的问题,如果用户在
中输入一些随机文本,您的程序总是跳入“无效输入”,并且从不停止等待用户输入。下面的代码应该可以解决您的问题

#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;
}
#包括
#包括
使用名称空间std;
int main()
{
整数算法;
//你在这里做什么
int i=0;
而(i++<3)
{
int choiceIsOkay=0;
字符串选择;
while(choiceIsOkay==0)
{

难道这是意料之中的事吗?为什么你的程序只需要输入ENTER和Y/N呢?@Dúthomhas“错了”。我想采取一切预防措施。啊,好吧。除了要求你的用户注意他们键入的内容之外,你没什么办法。你可以忽略除最后一个“Y”或“N”之外的任何内容。