我需要帮助解决这个简单的问题。
我开始更多地了解while循环,我不确定自己做错了什么。
这是我正在处理的代码片段,所以当我在while循环中使用or
时,循环会无限期地执行。但当我使用AND
时,循环停止了,有人能解释一下吗?难道不应该按照定义使用OR
吗?
void displayMenu() {
char option;
while (option != 'Q' or 'q') { //And or OR?
cout << "P - Print numbers" << endl;
cout << "A - Add a number" << endl;
cout << "M - Display mean of the numbers" << endl;
cout << "S - Display the smallest number" << endl;
cout << "L - Display the largest number" << endl;
cout << "Q- Quit" << endl;
cout << "Choose Your Option-" << endl;
cin >> option;
if (option == 'P' or 'p')
Print();
}
}
你已经像说(option != 'Q' or 'q')
一样表达了你的条件。
"选项不是upperQ或lowerQ">
编译器将其理解为";选项不是upperQ;或q〃;,其中";q〃;是一个非零的东西。非零被解释为"零";真";。因此,整个事情总是评估为";真";,始终,即使对于具有类似"Y"或"2"的值的option
也是如此。
你必须把它改写成
"选项不是"Q",也不是"Q">
并且您必须使用适当的运算符。使用额外的()
来确保你的意思被理解不会造成伤害。
这是作为完成的
( (option != 'Q') && (option != 'q') )
在某些情况下,使用or
,或者在这种情况下使用and
代替逻辑&&
是可能的,并且也不需要额外的()
。然而,主要的问题是您选择";或";而不是";以及";使用CCD_ 11是一种安全的方法,只要你不太熟悉像这样的表达式中的运算符及其求值顺序。
为什么你需要使用&&
("one_answers"(而不是or
或||
,这是两个有趣的字母会发生什么的问题。让我们取"Q",它显然是你正在寻找的两个之一。但它不是"q"。所以条件的第二部分是真的。在CCD_ 15的情况下,这是足够的;真";循环继续——显然不是你想要的。"q"也是如此,它不是"q",||
继续
你真正想要的是"两者都不是";这与";不是这个也不是那个";。因此,您需要";不是和不是";,CCD_ 17或更直接明确的CCD_
这可以用option != 'Q' && option != 'q'
的运算符优先级的隐含知识(查找并尝试记忆(来表示。