CIN 仅在输入非数字值时跳过下一个 CIN
cin skips over the next cin only when a non-numeric value is entered
当给定 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;
会工作
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- CIN 仅在输入非数字值时跳过下一个 CIN
- 查找最小的下一个更大的元素
- 转到基于范围的 for 循环中的下一个迭代器
- 如何检查流中文件的下一个单词是否为 alpha?
- 如何打印下一个字母直到 Z 并继续到 A?
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 有没有一种标准方法可以在C++中获取第 n 个"下一个"浮点值
- 下一个云桌面客户端构建过程
- C++自定义流操纵器,用于更改流上的下一个字符串
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 下一个排列定义
- 为什么在 sync_with_stdio(false) 之前使用 cin 为下一个 i/p 变量提供随机值
- 获取线跳到下一个 cin 并跳过上一个 cin
- Input With Spaces正在阻塞下一个输入(使用cin)
- Getline和cin依次跳过下一个输入
- 使用c++,在制作控制台应用程序时,是否有一种方法可以让cin接受输入的下一个字符并在不按回车键的情况下继续