只是想知道这条线对计算机的作用/意味着什么
Just wondering what this line does/means to the computer
int value(0);
while (!(std::cin >> value)) { //THIS LINE RIGHT HERE IS BUGGING ME(am really a noob)
cout << "you entered a non-digit charactern";
cin.clear();
cin.ignore();
}
这只是阻止人们输入字母而不是数字,但我想知道它是如何做到的
将cin
视为布尔值会告诉您它是否处于失败状态。 if ( cin )
是if ( cin.ok() )
的简写。因此,只要输入流不正常,循环就会继续,在接受一些输入后。
获取错误的输入是进入失败状态的一种方法。要退出状态,请调用clear()
,并忽略有问题的输入,请调用ignore()
。然后,您可以重试,如此循环中所示。
如果cin
接收的数据类型与value
不兼容,那么基本上它返回为false。
cin >> value
返回cin
对象作为结果。如果用户输入的类型与特定重载不匹配(在您的代码中,它是 int
),或者无法隐式转换为它,则它的评估结果为 false
。
cin
是类istream
的对象,表示标准输入流。它对应于cstdio
流stdin
。
operator >>
流的重载返回对同一流的引用,可以在布尔条件下通过转换运算符根据流的内部状态true
或false
计算。 cin
提供格式化的流提取。
操作
int value;
!(std::cin >> value)
如果数值为输入,如果输入非数字值,将返回 true。
cin.clear(); // will reset the state of stream
cin.ignore(); // ignore one or more characters
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 未在作用域中声明unordered_map
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 有没有一种方法可以在编译时获得作用域类名
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- C++quit()函数中可能存在作用域问题
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- "using namespace std;"在C++的作用是什么?
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- 只是想知道这条线对计算机的作用/意味着什么
- 超出作用域在c++对象中意味着什么
- 从构造函数捕获异常意味着我的实例之后超出了作用域