如何解决C ++上的“ while!cin >> x||cin.peek!='\ n'|| x <= 0”的含义
尽管有“ int”字符,我还是有一个代码,可以避免输入任何符号。
请逐步解释我在这里发生了什么事
while (!(cin >> x) || (cin.peek() != '\n') || x <= 0)
// What is happening here?
{
cin.clear();
// What is happening here?
while (cin.get() != '\n');
// What is happening here?
cout << "Error. Not a Natural number. Try one more time" << endl;
解决方法
代码只是简单地循环验证输入,丢弃不需要的输入。
while (...)
应该是不言自明的。循环直到其操作数的值为false
。
||
"inclusive OR" logical operator。如果其2个操作数中至少有1个为true
,则为true
。否则为false
。
!(cin >> x)
将值读入x
。如果由于I / O错误导致读取失败,或者输入的值与x
的数据类型不匹配,则cin
进入错误状态。 >>
返回对其被调用的std::ostream
的引用(即cin
)。如果该流处于错误状态,则将operator!
应用于该流将求值为true
,否则为false
。
(cin.peek() != '\n')
查看下一个输入的字符是否是换行符(例如通过键入 Enter 输入的换行符),而无需从输入缓冲区中删除该字符。
由于"short-circuit evaluation",如果>>
无法将值读入x
则无法到达此表达式。
x <= 0
应该是不言自明的。检查数字是负数还是零。
由于"short-circuit evaluation",如果>>
无法将值读入x
或peek()
不返回'\n'
,则无法到达此表达式。 / p>
cin.clear();
重置cin
的错误状态,例如>>
失败。
while (cin.get() != '\n');
读取并丢弃输入,直到遇到换行符( Enter )。
cout << "Error. Not a Natural number. Try one more time" << endl
应该是不言自明的。只需打印出一条消息供用户查看。
因此,如果用户输入的内容不是数字,或者该数字后没有紧跟 Enter ,或者该数字是 Enter 被丢弃,并且循环重复以尝试读取新的数字。
当用户键入一个大于0的数字并紧跟着 Enter 时,循环结束。
附带说明:
while (cin.get() != '\n');
通常使用cin.ignore()
代替:
cin.ignore(numeric_limits<streamsize>::max(),'\n');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。