Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ While循环在false时运行_C++_While Loop - Fatal编程技术网

C++ While循环在false时运行

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'

我已经尽了我所能让它工作。我对此进行了大量研究,并尝试了我能找到的所有可能的解决方案。我使用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')||(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时运行--您知道这是不可能的。While
While
条件始终为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语句,循环工作正常!