而循环在假时运行

While loop runs when false

本文关键字:运行 循环      更新时间:2023-10-16

我已经尝试了我能找到的一切来让它工作。我已经对此进行了大量研究,并尝试了我能找到的所有可能的解决方案。我正在使用QtCreator和c++编码。

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 Againn";
        cout << "Die 1: ";
        cin >> Die1;
        cout << "Die 2: ";
        cin >> Die2;
    }

你的代码:

(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 )

您可能需要检查您的 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 Againn";
        cout << "Die 1: ";
        cin >> Die1;
        cout << "Die 2: ";
        cin >> Die2;
    }

}