Kan*_*les 2 c random numbers generator
我正在为我的C编程课程做一个学习任务,我被要求做以下事情:
任务2.掷骰子.
在掷骰子游戏中,"通行证"下注如下进行.使用两个六面骰子,掷骰子的第一卷骰子被称为"出来滚动".下注就赢得当滚出来是7或11,并且当滚出来是2失去,3个,或12.如果4,5,6,8,9或10被卷起在滚出来,这个数字变成了"重点".玩家继续滚动骰子直到7或点滚动.如果该点首先滚动,则玩家赢得下注.如果玩家首先掷出7,则玩家输了.
使用上述规则编写一个播放Craps游戏的程序,以便模拟没有人为输入的游戏.该计划应该只计算玩家是赢还是输,而不是要求下注.创建一个模拟滚动两个骰子并返回总和的函数.添加循环以使程序播放10,000个游戏.
添加计数器,计算玩家获胜的次数,以及玩家失败的次数.在10,000个游戏结束时,计算获胜概率,即Wins /(Wins + Loss)并输出该值.从长远来看,谁将赢得大多数Craps游戏,你还是房子?
这是我到目前为止所写的内容:
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
// Craps Program
// Written by Kane Charles
// Lab 2 - Task 2
// 7 or 11 indicates instant win
// 2, 3 or 12 indicates instant los
// 4, 5, 6, 8, 9, 10 on first roll becomes "the point"
// keep rolling dice until either 7 or "the point is rolled"
// if "the point" is rolled the player wins
// if 7 is rolled then the player loses
int wins = 0, losses = 0;
int r, i;
int N = 1, M = 12;
int randomgenerator();
main(void){
/* initialize random seed: */
srand (time(NULL));
/* generate random number 10,000 times: */
for(i=0; i < 10000 ; i++){
int r = randomgenerator();
if (r == 7 || r == 11) {
wins++;
}
else if (r == 2 || r == 3 || r == 12) {
losses++;
}
else if (r == 4 || r == 5 || r == 6 || r == 8 || r == 9 || r == 10) {
int point = r;
int temproll;
int *tr = &temproll;
do
{
*tr = randomgenerator();
}while (temproll != 7 || temproll != point);
if (temproll == 7) {
losses++;
}
else if (temproll == point) {
wins++;
}
}
}
printf("Wins\n");
printf("%d",&wins);
printf("\nLosses\n");
printf("%d",&losses);
}
int randomgenerator(){
r = M + rand() / (RAND_MAX / (N - M + 1) + 1);
return r;
}
Run Code Online (Sandbox Code Playgroud)
该程序始终以:
Wins:
0.000000
Losses:
0.000000
Run Code Online (Sandbox Code Playgroud)
虽然它应该显示(超过10000)该程序赢了多少次以及丢失了多少次.有人能帮我解决这个问题吗?我怀疑我可能需要使用指针代替wins++并且losses++因此分数保持全局.
请记住,我是很多新手,所以任何帮助将不胜感激.
我看到你的if陈述中的一个主要问题,main例如:
if (r = 7 || 11)
Run Code Online (Sandbox Code Playgroud)
你正在使用=赋值而不是==相等.接下来的问题是你似乎对如何||运作有误解.它看起来像要检查,如果r是两种7或11它实际上是:
if( (r == 7) || (r == 11) )
Run Code Online (Sandbox Code Playgroud)
您还创建本地temproll在您的do循环在这里:
int temproll;
do
{
int temproll = randomgenerator();
^^^^^^^^^^^^
}while (temproll != 7 || point);
Run Code Online (Sandbox Code Playgroud)
这意味着do您离开后在循环中生成的值将丢失,后续if语句将检查未定义的值.据我所知,你可能意味着while:
while (temproll != 7 && temproll != r );
Run Code Online (Sandbox Code Playgroud)
这意味着虽然temproll不是7,但事实并非如此r.
最后打印输出的输赢也需要修复:
printf("%lf",&wins);
printf("%lf",&losses);
Run Code Online (Sandbox Code Playgroud)
该lf格式是double和你正在服用的地址wins,而不是价值的,它应该是:
printf("%d",wins);
printf("%d",losses);
Run Code Online (Sandbox Code Playgroud)