C++ “的含义;而(!(cin>;>;x)|(cin.peek()!=';\n';)|x<;=0)";关于C++;
我得到了一个代码,以避免任何符号输入,尽管有“int”字符 请一步一步地告诉我这里到底发生了什么C++ “的含义;而(!(cin>;>;x)|(cin.peek()!=';\n';)|x<;=0)";关于C++;,c++,C++,我得到了一个代码,以避免任何符号输入,尽管有“int”字符 请一步一步地告诉我这里到底发生了什么 while (!(cin >> x) || (cin.peek() != '\n') || x <= 0) // What is happening here? { cin.clear(); // What is happening here? while (ci
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(!(cin>>x)| |(cin.peek()!='\n')| | x代码只是验证循环中的输入,丢弃不需要的输入
while(…)
应该是自解释的。循环直到其操作数的计算结果为false
| |
如果.2个操作数中至少有1个计算结果为true
,则其计算结果为true
,否则为false
!(cin>>x)
将值读入x
。如果由于I/O错误导致读取失败,或者如果输入的值与x
的数据类型不匹配,cin
将进入错误状态。>
返回对调用它的std::ostream
的引用(即cin
)。如果流处于错误状态,则对该流应用运算符!
将计算为true
,否则计算为false
(cin.peek()!='\n')
查看下一个输入的字符是否为换行符(例如,在输入缓冲区中删除字符后的换行符)
由于,如果>
未能将值读入x
,则无法达到此表达式
x>
无法将值读入x
,或者peek()
不返回'\n'
cin.clear();
重置cin
的错误状态,例如如果>
失败
while(cin.get()!='\n');
读取并丢弃输入,直到遇到换行符(Enter)
我是否可以对这个问题进行投票,因为我不认为这里发生的事情对一个不熟悉这种语言或易于搜索的人来说是显而易见的。@dre这可能是真的,但是“向我解释一下”的问题问题是,在不知道OP缺少什么知识的情况下,我们如何编写一个有用的答案?他们知道cin>>x
做什么吗?他们知道cin.operator>>的返回是如何进行的()
有效?他们知道砰的一声正在对返回布尔进行隐式转换,然后翻转它吗?他们有没有尝试查找cin.clear()
的功能?是什么让他们在文档中感到困惑?你明白我在说什么吗?“因为”短路评估““,只有当>>成功地将一个值读入x,并且如果peek()返回“\n.”时,才达到此表达式-如果存在&&
,而不是|
@Fureeish,则会出现这种情况,false
值短路&
,而|
则相反。”(也就是说,任何true
值都会短路)。因此,雷米说如果!(cin>>x)
为true或(cin.peek()!='\n')
为true,那么x@scohe001 my bad,混合了句子和代码中的否定词是正确的。@fureish我更新了我的答案以澄清这些陈述。