从0到1,用C语言写一个猜数字游戏 📅 2026/8/14 14:09:12 前言为什么选择猜数字游戏作为C语言入门项目猜数字游戏是学习C语言编程的经典入门项目它看似简单却涵盖了编程中的多个核心概念变量定义、条件判断、循环控制、函数封装、随机数生成等。通过实现这个游戏你不仅能掌握C语言的基本语法还能理解程序设计的逻辑思维。本文将带你从零开始一步步实现一个完整的1~100猜数字游戏。我们会先深入探讨C语言中随机数的生成原理包括rand()、srand()和time()函数的使用然后结合这些知识完成游戏的核心逻辑。无论你是编程新手还是想巩固基础这个项目都能让你在实践中快速成长。准备好了吗让我们开始这段有趣的编程之旅吧对于写一个猜数字游戏我们希望实现以下游戏要求1.电脑生成1~100的随机数2.玩家在猜数字的过程中根据玩家输入的数字与正确答案进行对比给出玩家猜大了或猜小了的反馈直到猜对了游戏结束1.随机数的生成对于猜数字游戏来说首先要生成一个随机数那么怎么样生成随机数呢1.rand函数C语言中提供一个生成随机数的函数名为rand函数原型如下intrand(void);//当一个函数不接受任何参数时可以将其参数类型声明为voidrand 所包含的头文件为stdlib.hrand生成的是一个伪随机数是通过某种算法进行生成的不是真的随机随机数的取值范围0~RAND_MAXRAND_MAX依赖编译器不同编译器所给的大小不同,一般是32767对rand进行测试#includestdio.h#includestdlib.hintmain(){printf(%d\n,rand());printf(%d\n,rand());return0;}生成一次生成多次时为什么生成的随机数没有改变呢生产的数字不就不随机了吗rand生成的伪随机数其实是通过一个名为**“种子”**的基准值去进行生成的之所以几次生成的随机数一样是因为种子在几次生成的过程中默认的值都为1要想每次生成不同的随机数就要去改变种子的值。2.srandC语言中提供一个可以初始化种子的值的函数叫做srand函数原型如下voidsrand(unsignedintseed);//当一个函数不需要返回值时可以将其返回类型声明为void//seed表示一个随机数种子·注srand函数不需要多次调用一次运行程序中调用一次就行了演示通过演示我们发现只要每次去改变种子的值那就可以保证每次生成不同的随机数现在我想要生成随机数而又要一个随机变化的种子这产生了矛盾。3.time在C语言中我们一般使用程序运行的时间作为种子的因为时间是每时每刻都在发生变化的而我们只是想找一个时刻变化的量作为种子这刚好消除了这个矛盾。在C语言中有一个函数叫做**“time”**函数原型如下time_ttime(time_t*timer);//time函数返回类型为time_t类型time_t类型是32位或64位的整型类型//time返回的值实际上是当前时间与1970年1月1日0时0分0秒的时间差换算成以秒为单位的值也叫“时间戳”//对于括号里的参数暂时不做了解我们只是想让time函数返回时间戳得到一个变化的值可以这样写:time(NULL);time 所包含的头文件为time.h演示如下#includestdio.h#includestdlib.h#includetime.hintmain(){//将time函数返回值作为种子srand((unsignedint)time(NULL));//因为srand函数要求参数是unsigned int类型的所以我们使用一下强制类型转化printf(%d\n,rand());printf(%d\n,rand());return0;}生成一次生成两次4.随机数的范围在解决完随机数的生成你会发现在之前的几次演示中生成随机数的范围好像不只是1~100的数那么我们应该如何调整随机数的范围呢如果我们要生成0~99的随机数我们会rand()%100;//余数的范围是0~99在此基础上1~100的随机数rand()%1001;//余数的范围是1~100*拓展生成100~200的随机数100rand()%(200-1001);//余数范围是0~100加上100范围为100~200可得出,生成a~b的随机数arand()%(b-a1);2.猜数字游戏实现参考代码#includestdio.h#includestdlib.h#includetime.hvoidmenu()//menu不需要返回值返回类型声明为void{printf(**************************\n);printf(******** 1.play ********\n);printf(******** 0.exit ********\n);printf(**************************\n);}voidgame(){intrrand()%1001;intg0;//存储玩家输入的数while(1)//让玩家无限次数的猜用while搞一个死循环{scanf(%d,g);if(gr){printf(猜小了\n);}elseif(gr){printf(猜大了\n);}else{printf(恭喜你猜对了数字为%d\n,r);break;}}}intmain(){intinput0;srand((unsignedint)time(NULL));//无论玩不玩进入游戏都得打印一份游戏菜单这里我们用do-while循环比较合适do{//游戏菜单选择的变量menu();//游戏菜单代码多我们分装到一个函数里printf(请输入);scanf(%d,input);switch(input){case1:game();//游戏代码多我们分装到一个函数里break;case0:printf(退出游戏\n);break;default:printf(输入错误\n);break;}}while(input);//当input接收到0时循环结束退出游戏return0;}总结与展望通过本文的学习我们完成了一个完整的C语言猜数字游戏项目。让我们回顾一下关键知识点 核心收获随机数生成原理理解了rand()生成伪随机数的机制以及如何通过srand()设置种子来获得不同的随机序列。时间戳应用掌握了使用time(NULL)获取时间戳作为变化种子的技巧确保每次运行程序都能生成不同的随机数。范围控制方法学会了使用取模运算rand() % n来控制随机数的范围并推导出通用公式a rand() % (b - a 1)。完整项目实践将理论知识应用于实际项目实现了包含菜单、游戏逻辑、用户交互的完整程序。希望这个项目能成为你C语言学习路上的一个坚实起点。编程之路漫长而有趣保持好奇心多动手实践你一定会越来越熟练祝你编程愉快代码无bug