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

时间:2015-06-28 20:42:45

标签: c++ if-statement random srand

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

例如,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";
    }

4 个答案:

答案 0 :(得分:4)

x == y == z没有按照您的想法行事。请改用x == y && y == z

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

表达式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)) { /* ... */ }

答案 3 :(得分:0)

您应该使用逻辑运算符。

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

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

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