2015-06-28 2 views
1

Я новичок, и я создал игровой автомат. Колесо свернуто, а x, y и z установлены на случайные числа. У меня есть оператор if, который проверяет, есть ли x == y == z. Когда программа запускается, и цифры на самом деле равны, она запускает мой код, который говорит, что они не равны. Почему это происходит?(C++) Случайные числа равны, но программа говорит, что они не

Например, инструкция cout скажет 2 - 2 - 2, тогда она переходит к моему оператору if, если они не равны, и я получаю код «вы теряете».

Я должен добавить, что это не происходит каждый раз. Иногда он правильно выполняет оператор if, когда он равен. Это очень странно.

srand(time(0)); 

    int x = (rand() % 2) + 1; 
    int y = (rand() % 2) + 1; 
    int z = (rand() % 2) + 1; 

    std::cout << "The spin results are... " << x << " -- " << y << " -- " << z << std::endl << std::endl; 

    if(x == y == z) 
    { 
    std::cout << "You win!\n\n"; 
    playerCoins = playerCoins + (coinsBet * 2); 
    } 
    else 
    { 
     std::cout << "You lose!\n\n"; 
    } 
+1

Я предлагаю использовать оборудование заголовка вместо rand, поскольку он устарел. –

ответ

4

x == y может содержать 0 или 1, в зависимости от их истинного или ложного значения. Тогда 0 или 1 сравнивается с z, поэтому этот результат является ложным.

Правильный метод - проверить, равна ли x равным z, а y равно z, что, конечно, также означает, что x равно y. (x == z) && (y == z)

4

x == y == z не делает, что вы думаете. Вместо этого используйте x == y && y == z.

+0

i lold. Но это выглядит неплохо: D –

+1

Вы должны объяснить, что означают оба из них. – Dukeling

+0

x и y сравниваются, а затем результат сравнения (логический) сравнивается с z, am i справа? – Toumash

2

Выражение if (x == y == z) оценивается в false.

Притворись x, y и z все держать значение 2:

Поскольку (x == y) тогда истина/1. И z держит значение 2, если заявление будет проверять:

if ((x == y) == z) 
//  1 == 2 

Какой будет:

if (1 == 2) {} // false 

Вы можете исправить это, делая это:

if ((x == y) && (y == z)) { /* ... */ } 
0

Вы должны использовать логические операторы.

выражение, x == y == z неверно.
Это должно быть сделано таким образом.

if((x == y) && (y == z)) { //or... if ((x == y) == z) 
//your code goes here... 
} 

Дополнительная информация о логических операторах, Here.

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