(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
。
假装 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)) { /* ... */ }
您应该使用逻辑运算符。
表达式,x == y == z
是错误的。
应该这样做。
if((x == y) && (y == z)) { //or... if ((x == y) == z)
//your code goes here...
}
有关逻辑运算符的更多信息,Here。
我是初学者,我创建了一个老虎机模拟器。轮子旋转,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
。
假装 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)) { /* ... */ }
您应该使用逻辑运算符。
表达式,x == y == z
是错误的。
应该这样做。
if((x == y) && (y == z)) { //or... if ((x == y) == z)
//your code goes here...
}
有关逻辑运算符的更多信息,Here。