2017-01-23 80 views
-9

我试过一切,我可以找到让这个工作。我已经研究了这个广泛的数量,并尝试了我可以找到的所有可能的解决方案。我正在使用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 Again\n"; 
     cout << "Die 1: "; 
     cin >> Die1; 
     cout << "Die 2: "; 
     cin >> Die2; 
    } 
+4

在什么情况下,你指望所有的这些条件是假的? – TZHX

+7

'Die1'和'Die2'是数字,将它们与实际数字进行比较,而不是数字的字符表示。 – Rakete1111

+0

您正在接受整数值,然后将它们与字符进行比较。 –

回答

1

您可能想检查一下条件!

由于条件是否定的,您可以使用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; 
    } 

}

+0

谢谢你,我把它改回到整数,并用语句和语句取代了或者语句,并且循环正常工作! –

+0

不客气! – Neilkakkar

3

您的代码:

(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 

这里你的逻辑本质上是有缺陷的,因为它会总是评价为true

编辑

因为它已被其他人指出的那样,你也试图将这些整数比较其char值,这将不对齐你如何期望他们。

'0' = (hex)0x30 = (int)48 
'1' = (hex)0x31 = (int)49 
'2' = (hex)0x32 = (int)50 
... 

为了解决这个问题,你应该做你的比较,以实际数量:

(Die1 + Die2 != 2) 
+2

他并没有将它们与字符文字,而是字符串文字进行比较。这不是任何这些字面值在转换为整数时的值... – jaggedSpire

+0

虽然_also_正确,但逻辑仍然不正确;这是我的答案。 OP _应该能够修复语法错误。 –

+0

我们走了,我已经添加了一些细节描述以增加您的观点。 –