C语言 ‘‘猜数字‘‘小游戏

C语言编写“猜数字”小游戏


猜数字小游戏主要是随机数比较复杂

下面主要讲解关于随机数:

  1. rand()函数需要的头文件是:<stdlib.h>
  2. rand()函数原型:int rand(void);
  3. 使用rand()函数产生1-100以内的随机整数:int number = rand() % 100+1;
  4. 生成随机数需要调用rand()函数,在调用rand()函数之前,要先使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动生成随机数种子为1。随机种子相同,每次产生的随机数也会相同。
  5. 使用srand()函数时,要有随机种子参数,但若是写一个数字,例如srand(100)那么生成的随机数是还是相同的,因为是相同的随机种子,说明srand()括号里还需要一个随机数,这时候我们可以用时间戳,srand(time(0)),time函数的头文件是<time.h>,类型是time_t;
    srand的类型是unsigned int,这时候类型不同,我们可以设置强制转换,正确写法srand((unsigned int)time(null))传入一个空指针,因为程序中往往并不需要经过参数获得数据
  6. 程序中把随机值srand写在主函数里,循环外部,是因为,每次我们进入game,都会给一个初始值(即当前时间),srand((unsigned)time(NULL))应当放的地方离rand“远一点”,即两句执行的间隔大点,比如不要把srand和rand同放在一个循环里,如果放在一个循环里,上下语句挨着,这样时间上基本没变,所取的种子是相同的,所以结果打印一般都一样,也并不能起到随机数的效果。因此随机数srand放在主函数里,rand放在game()里,每次只用进一次main函数,只有一次初始值,之后产生不同随机值,计算机获取当前时间生成随机数,两条语句隔的远,时间不会那么近。

生成的随机数在0–32767之间,这是定义的,每次我们想要什么数,就对什么取余,要1–100之间的数字,那么rand()%100+1,对100取余,那么余数肯定是在0-99之间,在+1,那么就是1–100了

//思路--先有游戏菜单--然后选择开始游戏,或者退出--开始之后设置随机数--然后开始猜测比较
void menu() {
	printf("<--------猜数字小游戏 ---------->\n");
	printf("<----------  1.play ------------>\n");
	printf("<----------  0.exit ------------>\n");
	printf("<--------数字在0--100之间------->\n");
}
void game() {
	//生成的随机数在0--100之间
	int ran = rand()%100+1;
	int guess;
	while (1) {
		printf("请输入数字\n");
		scanf_s("%d", &guess);//输入自己要猜的数字
		if (guess > ran) {
			printf("你猜大了\n");
		}
		else if (guess < ran) {
			printf("你猜小了\n");
		}
		else {
			printf("你猜对了!\n");
			break;
		}
	}
}
int main() {
	int input = 0;
	//生成随机数  把随机数放在循环外面,只用设置一次初始值
	srand((unsigned int)time(NULL));
	do {
		menu();//调用菜单函数
		printf("请选择->\n");
		scanf_s("%d",&input);//这里用户根据菜单提示输入数字
		switch (input) {     //分支语句进行判断
		case 1:
			printf("开始游戏\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default: //如果输入其他值
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);  //input是用户根据菜单输入的数字,如果为0,那么退出,否则,继续循环
	return 0;
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值