本文建议C语言初学者在对c语言有了基本的了解(了解库函数,了解简单函数的调用),同时掌握简单的循环语句后食用,快来阶段测试一下前面学的内容吧~~~~~~~~~
猜数字游戏:电脑在1~100个数字中随机生成一个数字,由用户进行循环猜测,每次电脑提示用户猜小了还是猜大了,直至用户成功猜出该数字,后可选择退出或者继续玩游戏。
此外,本程序小测试只是给C语言初学者阶段检验,在不考虑各种极端环境,如输入字符错误,溢出,猜数字中的死循环想提前退出等等情况,用以检验前面学过的几种语法,函数等如何串联在一个程序中。
实现步骤:
1)二话不说,先把C语言基本框架三件套搬出来,库函数,主函数,返回值!qwq
#include <stdio.h>
int main()
{
return 0;
}
2)再用前几天刚学的几个函数制作一个简易的菜单吧!
void menu()
{
printf("***********************\n");
printf("** 1.play 0.exit **\n");
printf("***********************\n");
}
为了程序的可读性更高,我们选择在main函数外,自定义一个菜单函数menu,后面要频繁使用,只需一句调用就可以了哦,这种习惯要提前养成,不仅为后面的函数章节学习,以后开发一个复杂的程序,都需要封装不同的函数,做到简化程序,可读性更高~
3) 菜单做好,被主函数调用了,是不是要给用户选择啦?
这里定义一个input作为用户输入,选择玩游戏还是退出程序。
int input=0;
printf("请选择:>");
scanf("%d", &input);
4)用户如果做出选择,我们又面临着新的问题,如何让电脑知道程序接下来不同分支的走向?是if,else语句对input进行判断吗?好像可以,但是可能有点麻烦。关于选择语句,我们有更简单的方法,就是使用switch-case语句,来看看怎么实现吧:
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择!\n");
break;
}
这里的game()函数,就是我们游戏逻辑的主题,下面会详细讲解调用rand()函数进行随机数的实现,以及设置随机种子。
5)我们在前面题干中说到,如果用户想要玩玩一局,能够继续玩下去,显然上诉代码无法实现,这时我们想起我们学过的几种函数,for,while,do-while函数,由于我们程序跑起来,用户选择1.paly后,二话不说就开始打印菜单,并不是直接就进行条件判断,显然使用do-while循环更方便于是有:
int main()
{
int input=0;
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择!\n");
break;
}
}while (input);
return 0;
}
6)到此,简单测试一下基本框架功能是否正常
ok,都没问题,我们继续进行后面game()函数的实现
7)这里我们通过查询网站,书籍获取到,随机数的实现,C语言有专门的rand()函数,此函数如果直接调用,在一次程序运行中,我们会发现每次生成的随机数确实不同,但是我们关闭程序,再次运行后,离谱的发现,这这这生成的随机数竟然和上次一模一样!。。。原来这rand()生成的叫伪随机数,想要实现真正的随机数,在调用rand()函数前,还要设置srand随机数种子,在计算机中,时间转换成的时间戳每时每刻都在改变,因此,使用time作为随机数种子再合适不过了,麻麻再也不用担心我的rand()函数每次生成的都是一样的数了!
srand((unsigned)time(NULL));
8)关于game()函数,还是定义一个input作为用户每次输入猜测的数,将input与num已经生成好的那个随机数比较,num是通过rand()生成的随机数(因为随机数是不固定的),我们将不固定的随机数进行模运算,模100保证生成的数在99以内,加1,实现1-100内的随机数。
再通过if,else语句提示用户猜小了还是猜大了,嵌套入一个死循环while中,直到input和num相等,跳出循环。
!!!记得rand函数引用#include <stdlib.h>,time函数引用#include <time.h>库函数!!!
void game()
{
int num = rand() % 100 + 1;
int input = 0;
while (1)
{
printf("请输入要猜的数字:\n");
scanf("%d", &input);
if (num > input)
{
printf("猜小了\n");
}
else if (num < input)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了!就是%d\n", num);
break;
}
}
}
9)附完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//猜数字游戏
void menu()
{
printf("***********************\n");
printf("** 1.play 0.exit **\n");
printf("***********************\n");
}
void game()
{
int num = rand() % 100 + 1;
int input = 0;
while (1)
{
printf("请输入要猜的数字:\n");
scanf("%d", &input);
if (num > input)
{
printf("猜小了\n");
}
else if (num < input)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了!就是%d\n", num);
break;
}
}
}
int main()
{
srand((unsigned)time(NULL));
int input=0;
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择!\n");
break;
}
}while (input);
return 0;
}
10)玩一把吧~