微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++上的“ while!cin >> x||cin.peek!='\ n'|| x <= 0”的含义

如何解决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",如果>>无法将值读入xpeek()不返回'\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 举报,一经查实,本站将立刻删除。