C语言分支与循环(16) --- 制作一个猜数字小游戏
  uUWKQE7Avyk4 2023年11月02日 33 0

一.要求写一个程序,程序运行后会生成1-100的随机数,要求用户猜数字



示例代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void menu(void){
	printf("################################\n");
	printf("####  1.play         0.exit ####\n");
	printf("################################\n");
}
void game(void){
	int guess = 0;
	srand((unsigned int)time(NULL));
	int ret = 0;
	ret = rand()%100+1;
	while (1){
		printf("请输入数字:");
		scanf("%d",&guess);
		if (guess < ret){
			printf("猜小了!\n");
		}
		else if (guess > ret)
		{
			printf("猜大了!\n");
		}
		else{
			printf("猜对了!\n");
			break;
		}
	}
}
int main(void)
{
	int input = 0;
	do{
		menu();
		printf("\n请选择:");
		scanf("%d",&input);
		switch (input){
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏!\n");
			break;
		default :
			printf("输入错误!请重新输入!\n");
		}
	} while (input);
	system("pause");
	return 0;
}

这段代码可能看起来有些复杂,但是当我们拆开来看的时候就会发现很简单。首先来看自定义menu()中的内容,我们可以发现menu()函数中包含的就是游戏的界面,有两个选项 play 和 exit 供用户选择,我们再来看game()函数部分,由函数名我们可以得知这是游戏的核心部分,首先声明变量guess并为其赋值(guess = 0)然后调用了srand()函数,我们上个文章讲过 srand()函数可以理解为 rand()函数生成随机数字的种子数,我们将系统的时间戳传入srand()函数,这样可以保证srand()函数每次生成的种子数都是不一样的(因为时间一直在改变,时间戳也会相对应的发生改变)然后我们声明了变量ret用来接收rand()函数生成的随机值,这里注意一下,为了让我们游戏简单一点,我们要求随机数的取值范围要在1-100之间,而rand()函数生成的随机值范围在0~RAND_MAX,在C语言头文件中明确了RAND_MAX的值为

0~32767,这时候我们将其模100+1就可以得到1-100的数字,然后创建了一个while()语句,其条件语句为1,也就是真,则一定会执行这个语句而且不会执行完成就退出,然后提示用户输入数字,再调用if语句、else if语句以及else语句分别进行判断,当不满足条件的时候则重新要求用户输入,直到用户的输入和生成的随机数相等为止,使用break语句终止当前循环,我们最后再来看main()函数中的内容,首先声明了一个变量input来接收用户的输入,然后创建了一个do...while()循环,我们之前说过这个循环最大的好处就是无论条件满足与否do语句中的内容都会首先被执行一次,再由while()语句判断是否需要进入循环,这样我们接收了用户的输入,当用户输入1的时候则调用game()函数进入游戏,当用户输入0的时候,我们可以发现此时while()语句为 while(0) 我们说过C语言中 0代表假非零代表真,while()循环会终止,跳转到system()函数,而如果用户输入了其他数字,则不满足case子句会跳转到default语句,要求用户重新输入,由于非零代表真,所以循环会继续,这样我们的程序就能成功的运行起来,如图所示:

C语言分支与循环(16) --- 制作一个猜数字小游戏_循环

  

                                                                                                                  2023/8/3

                                                                                                                    王起舟

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
uUWKQE7Avyk4