CIN 仅在输入非数字值时跳过下一个 CIN

cin skips over the next cin only when a non-numeric value is entered

本文关键字:CIN 下一个 数字 输入      更新时间:2023-10-16

当给定 2 个整数时,以下代码按预期工作,但是如果给定非数值(如"a"(,它将跳过第二个 cin。

int num1;   // lesser integer value input by user
int num2;  // greater integer value input by user
cout << "nnNumber 1: ";
cin >> num1;

cout << "Number 2: ";
cin >> num2;
if (!cin)
{
cout <<"nError" <<endl;
return 0;
}

当为第一个提示输入数字时,程序将继续,但是如果为第一个提示输入类似a的内容,它会跳过第二个提示并遇到错误条件

当格式化输入运算符>>失败时(例如,您在预期数字时提供a作为输入(,缓冲区中的输入不会被删除,下次您要读取输入时,它仍然存在(这将尝试再次读取相同的a(。

标志也不会自动清除。

您可以通过检查何时读取输入来解决此问题:

if (!(std::cin >> num1))
{
// Failure of some kind
if (std::cin.eof())
{
// End of file, handle this any way you like or need
}
else
{
// Not end-of-file
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n'); // Skip bad input
std::cin.clear();  // Clear error flags
}
}

引用:

  • operator>>
  • ignore
  • clear

这意味着您的输入验证失败。 检查用户输入是否符合程序预期的过程称为输入验证。 5 是 int,a 是字符。

char a;
cout << "nnYour Char ";
cin >> a;

会工作