掌握了前面学习的知识我们可以写一些有趣的代码本片文章重点介绍猜数字游戏的实现设计游戏1.每轮自动随机生成1~100之间的随机数2.玩家猜数字每猜一次反馈猜大了还是猜小了直到猜对了程序终止首先我们需要解决的问题是如何生成符合要求的随机数这个时候我需要给大家介绍一个C语言的库函数—— rand() 函数该函数的原型如下int rand (void);rand() 函数会返回一个伪随机数这个伪随机数的范围是从0~RAND_MAX这个 RAND_MAX 的大小是依赖编译器实现的但是大部分编译器上是32767。rand()函数的使用需要包含头文件stdlib.h我们测试一下 rand() 函数的效果#include stdio.h #include stdlib.h int main() { printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); return 0; }这里我们调用5次得到5个随机数但是当我第二次运行这个代码时得到的结果跟上一次一摸一样我们可以看到虽然一次运行中产生的5个数字是相对随机的但是下一次运行程序生成的结果和上一次一摸一样这就说明有点问题。如果再深入了解一下我们就不难发现其实rand()函数生成的随机数是伪随机的。伪随机数不是真正的随机数是通过某种算法生成的随机数真正的随机数是无法预测下一个值是多少的。而 rand() 函数就是对一个叫“种子”的基准值进行运算生成的随机数之所以前面每次运行程序产生的随机数序列是一样的就是因为 rand() 函数生成随机数的默认种子是1如果要生成不同的随机数就要让种子是变化的。那么我们如何让种子变化起来呢C语言中又提供了一个函数叫srand是用来初始化随机数的生成器的函数原型如下void srand (unsigned int seed);程序中在调用 rand() 函数之前要先调用 srand() 函数通过 srand() 函数的参数 seed 来设置rand() 函数生成随机数的种子只要种子在变化每次生成地随机数序列也就变化起来了那也就是说给 srand() 函数的种子如果是随机的rand() 就能真正地生成随机数但是在生成随机数的时候又需要一个随机数这不就矛盾了吗这时我们就想到一个办法时间每分每秒在变化我们能不能用时间来作为我们需要的随机数呢在程序中我们一般是使用程序运行的时间来作为随机数的种子因为时间是时刻在变化的。在C语言中有一个函数叫做time它可以获得时间time 函数的原型如下time_t time (time_t* timer);time 函数会返回当前的日历时间其实返回的是1970年1月1日0时0分0秒到现在程序运行时间之间的差值单位是秒。返回的类型是time_t 类型的time_t 类型本质上其实就是32位或者64位的整型类型。 time 函数的参数 timer 如果是非NULL的指针的话函数也会将这个返回的差值放在timer 指向的内存中带回去。如果 timer 是 NULL就只返回这个时间的差值。time函数返回的这个时间差也被叫做时间戳。time 函数的时候需要包含头文件time.h如果只是让 time 函数返回时间戳我们就可以这样写time(NULL);//调⽤time函数返回时间戳这⾥没有接收返回值那我们就可以让生成随机数的代码改写成如下#include stdio.h #include stdlib.h #include time.h int main() { //使⽤time函数的返回值设置种⼦ //因为srand的参数是unsigned int类型我们将time函数的返回值强制类型转换 srand((unsigned int)time(NULL)); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); return 0; }多运行几次看看每次的运行就有差异了。注截图只是当时程序运行的结果你的运行结果不一定和这个一样srand函数是不需要频繁调用的一次运行的程序中调用一次就够了现在我们已经解决了生成随机数的问题但是我们要求的随机数是要在1~100的范围之间我们如何控制在这个范围呢如果我们要生成0~99之间的随机数方法如下rand() % 100;//余数的范围是0~99如果要生成1~100之间的随机数方法如下rand()%1001;//%100的余数是0~99,0~99的数字1,范围是1~100如果要生成100~200的随机数方法如下100 rand()%(200-1001) //余数的范围是0~100加100后就是100~200所以如果要生成a~b的随机数方法如下a rand()%(b-a1)这也是我们总结出来的公式只要你想生成a~b之间的随机数直接套用上面的写法就行。以上就是我们所有的准备工作接下来就是猜数字游戏的实现了首先上来我们先要准备好需要用到的头文件#include stdio.h #include time.h #include stdlib.h然后我们想到上来就需要打印游戏菜单供我们选择假设玩家选择1是玩游戏选择0是退出游戏我们命名一个menu函数封装起来如下:void menu() { printf(--------------------------\n); printf(-------- 1.玩游戏 ---------\n); printf(-------- 0.退出游戏 -------\n); printf(--------------------------\n); }接下来我们来完成主函数的代码编写不管玩家是否选择玩游戏我们上来首先需要打印菜单并且玩家玩完一次还想玩可以继续选择因此我们应该使用do while循环由于 srand 函数只需要调用一次我们把 srand 函数放在循环的外面int main() { int input 0; srand((unsigned int)time(NULL)); 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; }解析程序一运行起来就打印菜单让玩家作出选择用 input 变量接收如果选择1进入游戏选择0退出游戏并且下一次不会再进入循环如果输入其他数字提示玩家非法输入重新选择game()函数用来封装游戏的具体实现逻辑void game() { int r rand() % 100 1; int guess 0; while (1) { printf(请猜数字:); scanf(%d, guess); if (guess r) { printf(猜⼩了\n); } else if (guess r) { printf(猜⼤了\n); } else { printf(恭喜你猜对了\n); break; } } }考虑到玩家可能无法一次就猜中所以用while循环让玩家可以重复猜这里利用简单的if-else语句来判断玩家输入的数字是大了还是小了如果猜大了提示玩家猜大了猜小了提示玩家猜小了如果都不是那就是猜对了利用break跳出循环。将以上代码整理完整版如下#include stdio.h #include stdlib.h #include time.h void menu() { printf(-----------------------\n); printf(------- 1.玩游戏 ------\n); printf(------- 0.退出游戏 ----\n); printf(-----------------------\n); } void game() { int num rand() % 100 1; int guess 0; while (1) { printf(请猜数字:); scanf(%d, guess); if (guess num) { printf(猜大了\n); } else if (guess num) { printf(猜小了\n); } else { printf(恭喜你猜对了!\n); break; } } } int main() { srand((unsigned int)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; }上面的代码就是可以直接运行的运行结果如下当然如果你还可以限制猜数字的次数比如只给玩家6次机会若6次机会用完游戏失败仅需要在game函数中添加一些代码如下void game() { int num rand() % 100 1; int guess 0; int count 6; while (count) { printf(\n你还有%d次机会\n, count); printf(请猜数字:); scanf(%d, guess); if (guess num) { printf(猜大了\n); } else if (guess num) { printf(猜小了\n); } else { printf(恭喜你猜对了!\n); break; } count--; } if (count 0) { printf(你失败了正确值是%d\n, num); } }游玩过程如下本篇到此结束感谢阅读如果觉得有帮助欢迎点赞支持。