已关闭此问题为not reproducible or was caused by typos。它目前不接受回答。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
25天前关闭
Improve this question
附件是我的骰子游戏的代码。我得到玩家100%的胜利,因为我的兰德()在所有1,000,000场比赛中调用相同的数字。我已经看到很多人发布关于这个问题的帖子,每个人都说只给srand打一次电话,但我想我不明白这意味着什么。这是我在C的第六周,它开始变得非常混乱。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define numGames (1000000)
#define plrWinThrw (7, 11)
#define hseWinThrw (2, 3, 12)
int rollDice ();
int playGame ();
int main ()
{
srand (time (NULL));
int playerWins = 0;
int houseWins = 0;
for (int i = 0; i < numGames; i++)
{
int result = playGame ();
if (result == 1)
{
playerWins++;
}
else
{
houseWins++;
}
}
float playerProb = (float) playerWins / numGames * 100;
float houseProb = (float) houseWins / numGames * 100;
printf ("Number of games won by the player: %d\n", playerWins);
printf ("Number of games won by the house: %d\n", houseWins);
printf ("Percent probability the player wins: %.1lf\n", playerProb);
printf ("Percent probability the house wins: %.1lf\n", houseProb);
return 0;
}
int rollDice ()
{
int die1 = rand () % 6 + 1;
int die2 = rand () % 6 + 1;
int roll = die1 + die2;
return roll;
}
int playGame ()
{
int roll = rollDice ();
if (roll = plrWinThrw)
{
return 1;
}
else if (roll = hseWinThrw)
{
return -1;
}
int point = roll;
while (roll != point && roll != 7)
{
roll = rollDice ();
}
if (roll = point)
{
return 1;
}
return -1;
}
我试过移动srand和rand()函数。似乎没有什么能解决我的问题。
3条答案
按热度按时间hts6caw31#
在if语句中使用赋值运算符
=
而不是比较运算符==
。当您写入
if (roll = plrWinThrw)
时,它将plrWinThrw
分配给roll
,而不是将roll
与plrWinThrw
进行比较。为了正确地比较它们,您需要编写if (roll == plrWinThrw)
hkmswyz62#
正确使用随机数-调用srand一次,使用种子,然后调用rand。
你的问题似乎是你的if语句,他们不做你认为他们做的事情:你混淆了赋值(
=
)和比较(==
)。x=1
是一个赋值。它使x
保持值1
,并且语句的计算结果为1
(如果在if语句中使用,则计为true
)。x
之前的值是多少并不重要!另一方面,x==1
不会改变x
的值。如果x
的值为1
,则返回true值。这是你通常想在if语句中使用的。虽然这是一个容易犯的错误,甚至可能是一个错别字,但有一种系统的方法可以防止这种错误:使用编译器警告,它们会告诉你这类误导性代码。在gcc/clang上,
-Wall
-选项可以完成任务,其他编译器也有等效的选项。lokaqttq3#
我看到很多人发布关于这个问题的帖子,每个人都说只调用
srand
一次,但我想我不明白这意味着什么。srand
中的s
代表seed
。它是你给予给 * 伪随机数生成器 * 的初始值。可以说,这是它的起点。它是伪的,因为它根本不是随机的。
rand
生成一个数字序列号,每次你给它给予相同的种子时,它都是 * 完全 * 相同的(在你使用的库的特定版本中--rand
中使用的实际公式不是标准化的)。