(C++) 随机数相等,但程序说它们不相等

(C++) Random numbers are equal, but program says they aren't

我是初学者,我创建了一个老虎机模拟器。轮子旋转,x、y 和 z 被设置为随机数。我有一个 if 语句来检查是否 x == y == z。当程序运行时,数字实际上是相等的,它运行我的代码说它们不相等。为什么会这样?

例如,cout 语句会说 2 -- 2 -- 2,然后在它们不相等时转到我的 if 语句,然后我得到 "you lose" 代码。

我应该补充一点,这并不是每次都会发生。有时它会在它们相等时正确执行 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";
    }

x == y == z 并不像您认为的那样。请改用 x == y && y == z

x == y 可能会产生 0 或 1,具体取决于它们的真值或假值。然后将 0 或 1 与 z 进行比较,这就是给定结果为假的原因。

正确的方法是检查x是否等于z和y是否等于z,当然这也意味着x等于y。 (x == z) && (y == z)

表达式 if (x == y == z) 的计算结果为 false

假装 xyz 都持有值 2:

因为 (x == y) 为真/1。并且 z 持有值 2,if 语句将检查:

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

变成:

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

您可以通过这样做来解决这个问题:

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

您应该使用逻辑运算符。

表达式,x == y == z是错误的。
应该这样做。

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

有关逻辑运算符的更多信息,Here