Code Bye

一个用C语言写的赌博游戏

#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一次就行了,否则种子一样,产生的随机数也会一样
#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("胜败乃兵家常事,再来一次!");
			}
		}
	}
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明一个用C语言写的赌博游戏