2017-01-23 7 views
-9

Я пробовал все, чтобы найти, чтобы это работало. Я исследовал эту обширную сумму и пробовал все возможные решения, которые я могу найти. Я использую QtCreator и кодирование в C++.Пока цикл работает, когда false

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 (||), чтобы объединить их.

EDIT: И как указано, вы должны сравнивать 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 _should_ сможет исправить ошибку синтаксиса. –

+0

Там мы идем, я добавил немного более подробное описание, чтобы добавить к вашей точке. –

Смежные вопросы