C ++:在第一个cin.ignore之后忽略输入

时间:2018-08-29 11:32:43

标签: c++ while-loop

好的,所以这是我程序的一部分,从根本上讲,这是向用户重复出现的错误消息,直到输入有效的输入为止。因此,基本上,我面临的问题是,每当我输入无效的数字(例如0、12或负数)时,都不会输出任何内容,程序将等待另一个输入,然后才将输入标识为错误或有效输入。输入符号或字母时,这不是问题。我可以使用任何解决方法吗?

while (Choice1 < 1 || Choice1 > 11) 
{
    if(!(cin >> Choice1), Choice1 < 1 || Choice1 > 11)
    {   
        cin.clear();
        cin.ignore(512, '\n');
        cout << "\n\aError! Please enter a valid input!" << endl;
        cout << "Now please enter the first code: ";
        cin >> Choice1;
    }
}

1 个答案:

答案 0 :(得分:1)

也许这就是您想要的:

#include <iostream>
#include <limits>

int main()
{
    int Choice1{0};

    while (!(std::cin >> Choice1) || Choice1 < 1 || Choice1 > 11) 
    {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

        std::cout << "Error! Please enter a valid input!" << std::endl;
        std::cout << "Now please enter the first code: " << std::endl;
    }

    return 0;
}

您可以阅读here和/或here有关逗号运算符的信息,但我发现它不是条件表达式的一部分 em>。另外,我不认为您真的希望if限定 while循环。我进行了一些其他小的更改,保留了大多数原始结构-仍然可以使用一些工作。