我是初学者,我创建了一个老虎机模拟器。滚轮旋转,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";
}
答案 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
。
假装x
,y
和z
都保留值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。