C++ While循环在false时运行
我已经尽了我所能让它工作。我对此进行了大量研究,并尝试了我能找到的所有可能的解决方案。我使用C++中的QtC造饰者和编码。p>C++ While循环在false时运行,c++,while-loop,C++,While Loop,我已经尽了我所能让它工作。我对此进行了大量研究,并尝试了我能找到的所有可能的解决方案。我使用C++中的QtC造饰者和编码。p> int main() { int Die1, Die2; cout << "Die 1: "; cin >> Die1; cout << "Die 2: "; cin >> Die2; while ( (Die1+Die2 != '2')||(Die1+Die2 != '3'
int main() {
int Die1, Die2;
cout << "Die 1: ";
cin >> Die1;
cout << "Die 2: ";
cin >> Die2;
while ( (Die1+Die2 != '2')||(Die1+Die2 != '3')||(Die1+Die2 != '5')||(Die1+Die2 != '7')||(Die1+Die2 != '9')||(Die1+Die2 != '11')) {
cout << "You Rolled a " <<Die1<< " and " <<Die2<< " for a Total of " <<Die1 + Die2<<". Please Roll Again\n";
cout << "Die 1: ";
cin >> Die1;
cout << "Die 2: ";
cin >> Die2;
}
intmain(){
int Die1,Die2;
cout>Die1;
cout>Die2;
而((Die1+Die2!='2')| |(Die1+Die2!='3')| |(Die1+Die2!='5')| |(Die1+Die2!='7')|(Die1+Die2!='9')| |(Die1+Die2!='11')){
cout您可能需要检查您的while状态
由于条件在否定中,因此可以使用AND(&&)而不是OR(| |)来组合它们
编辑:
如前所述,您应该将Die1和Die2与数字进行比较。如果您希望保持字符不变,可以将字符“0”添加到Die1和Die2的总和中
这似乎很管用:
#include <bits/stdc++.h>
using namespace std;
int main() {
int Die1, Die2;
cout << "Die 1: ";
cin >> Die1;
cout << "Die 2: ";
cin >> Die2;
while ( (Die1+Die2 != 2)&&(Die1+Die2 != 3)&&(Die1+Die2 != 5)&&(Die1+Die2 != 7)&&(Die1+Die2 != 9)&&(Die1+Die2 != 11)) {
cout << "You Rolled a " <<Die1<< " and " <<Die2<< " for a Total of " <<Die1 + Die2<<". Please Roll Again\n";
cout << "Die 1: ";
cin >> Die1;
cout << "Die 2: ";
cin >> Die2;
}
#包括
使用名称空间std;
int main(){
int Die1,Die2;
cout>Die1;
cout>Die2;
而((Die1+Die2!=2)&(Die1+Die2!=3)&(Die1+Die2!=5)&(Die1+Die2!=7)&(Die1+Die2!=9)&(Die1+Die2!=11)){
cout您的代码:
(Die1+Die2 != '2') ||
(Die1+Die2 != '3') ||
(Die1+Die2 != '5') ||
(Die1+Die2 != '7') ||
(Die1+Die2 != '9') ||
(Die1+Die2 != '11')
将评估:
A.
( 1+1 != 2 ) = false
( 1+1 != 3 ) = true
break;
B.
( 1+2 != 2 ) = true
break;
C.
( 1+3 != 2 ) = true
break;
...
( 1 + ( x>2 ) != 2 ) = true
你在这里的逻辑天生是有缺陷的,因为它总是被评估为正确的
编辑
正如其他人所指出的,您还试图将这些整数与它们的char
值进行比较,这与您期望的结果不一致
'0' = (hex)0x30 = (int)48
'1' = (hex)0x31 = (int)49
'2' = (hex)0x32 = (int)50
...
要解决此问题,您应该与实际数字进行比较:
( Die1 + Die2 != 2 )
在什么情况下,您希望所有这些条件都为false?Die1
和Die2
是数字,请将它们与实际数字进行比较,而不是数字的字符表示形式。While循环在false时运行--您知道这是不可能的。WhileWhile
条件始终为true,因为显然Die1+Die2不能等于both 2和3!所以它必须与其中一个不同,更不用说你的其他测试了…DeMorgan定律-这不仅仅是一个好主意。我喜欢用它在布尔表达式上,像这样作为一个健全的检查,看看“else/not”条件也是有意义的,即X==2和X==3和X==5和…Doh!他没有将它们与字符文字进行比较,而是与字符串文字进行比较。当转换为整数时,这不是任何文字的值…虽然也是正确的,但逻辑仍然不正确;这是我的答案。OP应该能够修复语法错误。这里是we go,我为你的观点添加了一点更详细的描述……呃,你将它们与它们的char值进行比较。他将它们与将字符串文本的const char*
转换为整数类型时得到的整数进行比较。OP将整数与字符串文本进行比较,如0!=“
。您正在与字符文字进行比较,如0!=''
。它们是不同的东西。请注意不同的引号(字符串文字有双引号,字符文字有单引号)字符串文字的类型为const char*
,字符文字的类型为char
。谢谢,我将其改回整数,并将or语句替换为and语句,循环工作正常!