【问题标题】:C++: Ignoring input after first cin.ignoreC ++:在第一个cin.ignore之后忽略输入
【发布时间】:2018-08-30 11:18:41
【问题描述】:

好的,这是我的程序的一部分,它基本上是向用户重复出现的错误消息,直到输入有效的输入。所以基本上我面临的问题是,每当我输入一个无效的数字(例如 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;
    }
}

【问题讨论】:

  • 首先,Choice1是什么?其次,请阅读the built-in comma operator,因为您的if 条件使用它(以使第一个条件无用的方式)。
  • Choice 1 是一个整数变量,用户在 'cin' 处输入,它会增加 12 个目的地之一。另外,逗号运算符是否必须对此做些什么?
  • 逗号不是逻辑运算符 - a, b 表示“评估 a 并忽略结果,然后评估 b”。

标签: c++ while-loop


【解决方案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 关于逗号运算符的信息,我没有发现它们属于条件表达式。另外,我不认为你真的想要 if 限定 while 循环。我做了一些额外的小改动,保留了大部分原始结构 - 仍然可以使用一些工作。

【讨论】:

  • 好的,您的代码似乎可以工作,但有一个问题。第一次运行程序时,即使输入有效,例如4 被馈入,仍然被忽略,需要再次输入。其次,我必须仅使用 &lt;iostream&gt; 头文件来完成上述任务,因为我的任务限制了我这样做。那么,有解决办法吗?
  • @Datboi 我刚才跑了,输入 4 没有被忽略,程序完成执行。关于仅使用 标头,您可以看到它是唯一被使用的东西。
猜你喜欢
  • 2020-07-15
  • 2021-10-23
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 2019-11-24
  • 1970-01-01
相关资源
最近更新 更多