#include<stdio.h> #include<stdlib.h> #include<time.h> int craps(void) //这是一个双骰子的函数,本人感觉这个函数的返回值本人没有整对 { enum Status{CONTINUE,WON,LOST}; int sum,myPoint,die1,die2; enum Status gameStatus; srand(time(NULL)); die1=1+(rand()%6); die2=1+(rand()%6); sum=die1+die2; switch(sum){ case 7: case 11: gameStatus=WON; break; case 2: case 3: case 12: gameStatus=LOST; break; default: gameStatus=CONTINUE; myPoint=sum; break; } while(gameStatus==CONTINUE){ die1=1+(rand()%6); die2=1+(rand()%6); sum=die1+die2; if(sum==myPoint){ gameStatus=WON; } else{ if(sum==7){ gameStatus=LOST; } } } if(gameStatus==WON){ return 1; } else{ return 0; } } int craps(void); int main(void) { int bankBalance=1000; int wager; int result; printf("请您输入赌注:\n"); scanf("%d",wager); while(wager<=bankBalance){ result=craps(); if(result==1){ bankBalance+=wager; printf("手气不错,再来一次吧!"); } else{ if(result==0){ bankBalance=bankBalance-wager; printf("胜败乃兵家常事,再来一次!"); } } } }
这段代码本来应该实现本人输入一个小于或等于本金的赌注,这里本人用的是while循环来实现,接下来假如条件满足的话就会执行一次craps函数,接下来就是用if…else来把产生的结果做处理。
int craps(void); int main(void) { int result,i; int win=0; int lost=0; for(i=1;i<=100;i++){ result=craps(); if(result==1){ win+=1; } else{ if(result==0){ lost+=1; } } } printf("the win is %d\n",win); printf("the lost is %d\n",lost); return 0; }
上面这个代码是本人想要测试本人的craps函数能否正确来编写的,但是出来的结果却是win:100,lost:0.所以本人的craps函数错了,希望高手能帮本人看看本人的问题
解决方案
80
有两个问题:
1.scanf(“%d”,wager);应该是scanf(“%d”,&wager);
2.srand(time(NULL));放到main函数里,srand一次就行了,否则种子一样,产生的随机数也会一样
1.scanf(“%d”,wager);应该是scanf(“%d”,&wager);
2.srand(time(NULL));放到main函数里,srand一次就行了,否则种子一样,产生的随机数也会一样
#include<stdio.h> #include<stdlib.h> #include<time.h> int craps(void) //这是一个双骰子的函数,本人感觉这个函数的返回值本人没有整对 { enum Status{CONTINUE,WON,LOST}; int sum,myPoint,die1,die2; enum Status gameStatus; die1=1+(rand()%6); die2=1+(rand()%6); sum=die1+die2; switch(sum){ case 7: case 11: gameStatus=WON; break; case 2: case 3: case 12: gameStatus=LOST; break; default: gameStatus=CONTINUE; myPoint=sum; break; } while(gameStatus==CONTINUE){ die1=1+(rand()%6); die2=1+(rand()%6); sum=die1+die2; if(sum==myPoint){ gameStatus=WON; } else{ if(sum==7){ gameStatus=LOST; } } } if(gameStatus==WON){ return 1; } else{ return 0; } } int craps(void); int main(void) { int bankBalance=1000; int wager; int result; srand(time(NULL)); printf("请您输入赌注:\n"); scanf("%d",&wager); while(wager<=bankBalance){ result=craps(); if(result==1){ bankBalance+=wager; printf("手气不错,再来一次吧!"); } else{ if(result==0){ bankBalance=bankBalance-wager; printf("胜败乃兵家常事,再来一次!"); } } } }