C语言初阶:猜数字小游戏项目(不含数组,少量指针)

使一位零基础编程选手C语言从入门到精通——C语言基础专项知识点集合 这是一篇博主学习过程中所有C语言基础专项的集合,从最简单的`hello world!`开始,介绍C语言基本语法和一些底层知识。 阅读详情

这篇博客是关于C语言的分支与循环部分基础的解读,为编程新手后续学习数组和函数做良好的铺垫,希望我的分享对大家有所帮助。

前面几讲,我们把 if、switch、while、for、do-while 这些家伙一个个拎出来,单独训练了一遍。 现在到了验收时刻——把它们放进同一个程序里,看它们能不能拧成一股绳。
验收项目:猜数字游戏。
验收标准:你自己玩两把,会觉得有点东西
一、先看需求(养成看题目的好习惯),别急着敲代码
游戏要求很朴素,四条:
1. 给个菜单——1 玩游戏,0 退出游戏;
2. 选 1,电脑自动生成一个 1~100 的随机数,进入猜数字环节;
3. 玩家猜,猜大了提示猜大了,猜小了提示猜小了,猜对了游戏结束;
4. 玩一次不过瘾,还能继续玩。

前三样你都会,第四样——随机数——是本讲唯一的新朋友。
二、随机数:计算机最大的"伪"装
2.1 rand:看起来挺随机,其实很记仇
C 语言给了一个函数叫 rand,声明在 stdlib.h 里:
   int rand(void);
它会返回一个伪随机数,范围在 0 ~ RAND_MAX 之间。RAND_MAX 的具体值取决于编译器,但大部分编译器上是 32767。
于是你兴冲冲地写了这段:

#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;
}

第一次运行,五个数字蹦出来,还行,挺像那么回事。

#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 不需要频繁调用,一次运行的程序里调用一次就够了。 
有人喜欢把它塞进循环里,一秒内调几千次——种子一模一样,随机数自然一模一样。 
2.5 把随机数"关进笼子":限定范围            
     rand 给的数在 0 ~ 32767 之间,直接拿来玩游戏太离谱了。用取模(%)把它压到需要的区间:
rand() % 100; // 余数范围 0~99   
rand() % 100 + 1; // %100 的余数是 0~99,+1 后范围 1~100
100 + rand() % (200 - 100 + 1); // 余数 0~100,加 100 后是 100~200
总结成通式——要生成 a ~ b 之间的随机数:a + rand() % (b - a + 1)
这个公式建议直接背下来,以后写抽奖、掷骰子、洗牌,全靠它。
三、开写:猜数字游戏
一局游戏的完整逻辑:

打印菜单
    纯 printf
    game()

     rand + while + if / else if / else
     main()入口

主流程:设种子、循环选菜单
do-while + switch

3.1 一局游戏:game()

void game()
{
    int r = rand() % 100 + 1;   // 1~100 的随机数
    int guess = 0;
    while (1)                   // 猜不对就一直猜
    {
        printf("请猜数字>:");
        scanf("%d", &guess);
    if (guess &lt; r)
    {
        printf("猜小了\n");
    }
    else if (guess &gt; r)
    {
        printf("猜大了\n");
    }
    else
    {
        printf("恭喜你,猜对了\n");
        break;              // 猜对了,跳出循环
    }
}
}

这里 while(1) 配上 break,是很经典的写法:不知道要循环多少次,那就先无限循环,条件满足了再跳出去.

void menu()
{
    printf("***********************\n");
    printf("******   1. play   ******\n");
    printf("******   0. exit   ******\n");
    printf("***********************\n");
}

菜单单独抽成一个函数,好处是 main 里一眼就能看懂流程,不会被一堆 printf 迷了眼。

int main()
{
    int input = 0;
    srand((unsigned int)time(NULL)); // 只设一次种子
do
{
    menu();
    printf("请选择:&gt;");
    scanf("%d", &amp;input);

    switch (input)
    {
    case 1:
        game();
        break;
    case 0:
        printf("游戏结束\n");
        break;
    default:
        printf("选择错误,重新选择\n");
        break;
    }
} while (input);

return 0;
}

三个细节值得注意:

  • do-while 而不是 while:菜单至少要显示一次,用 do-while 天然合适,可以反复进行游戏;
  • while(input):输入 0 时循环结束,输入 1 继续玩,用输入值本身当循环条件,比再写个 flag 变量清爽;
  • switch 的 default:玩家手滑输入个 7,也能优雅地提示"选择错误",而不是默默退出。


数一数,一百行上下。这一百行,把你前四讲学的分支和循环几乎全用上了。
五、给游戏加点"难度"
代码能跑,只是及格线。下面两个游戏扩展,拿去练手:
1. 限制次数。 给游戏增加难度,最多只能猜 5 次,5 次都猜不出来就算失败。
提示:一个计数器 + 循环条件限制 + 猜错后判断次数。
2. 加上计时。 每次猜完数字,显示当前已经花费了多少秒。
提示:游戏开始时记一个时间戳,每次猜完再取一次,两个时间戳相减就是秒数。
改完之后你会发现:需求一变,代码结构就得跟着调整——这比背语法有意思多了。

如果你实在不会,就把游戏需求交给AI吧,不过得自己上手一遍哦,祝你游戏愉快

【C语言 MOOC】程序设计入门_C语言(翁恺) 程序设计入门—C语言(MOOC—翁恺) Week 1 程序设计与C语言 lesson 1 计算机和编程语言 告诉人做一件事情是 what to do 告诉计算机做一件事情是 how to do 编程语言并非人与计算机交流的语言,人与计算机通过人机交互进行交流 辗转相除法 int u = 32; int v = 26; while (v != 0) { int temp = u % v;... 阅读详情

相关推荐

C语言入门实战:5个小游戏项目掌握核心编程思维

C语言作为编程的基石,其核心价值在于帮助开发者深入理解计算机底层原理,如内存管理、指针操作和程序执行流程。通过实践项目,学习者能将抽象语法转化为解决实际问题的能力,这是从理论迈向工程实践的关键一步。在游戏开发、嵌入式系统等应用场景中,这种扎实的编程基础尤为重要。本文聚焦于C语言初学者常遇到的**随机数生成**和**用户输入处理**等典型问题,通过设计猜数字、贪吃蛇等经典小游戏案例,系统讲解如何将循环、数组、函数等基础概念应用于完整项目,从而有效构建计算思维与调试能力。

weixin_30274627的博客 439

C语言的趣味小游戏——猜数字游戏

通过对分支循环语句的学习之后,我们现在已经有能力来做一个简单的C语言的小游戏——猜数字游戏。在进行制作猜数字游戏之前我们先做一个关机程序在这里插入代码片。

2503_91432867的博客 1125

用C语言开发小游戏实战教程

本文还有配套的精品资源,点击获取 简介:用C语言编写小游戏是提高编程技巧和理解计算机图形学的好方法。本教程针对初学者,涵盖了C语言基础语法、标准输入输出、结构体与指针、图形库、游戏循环、事件处理、碰撞检测、动画和帧率、内存管理、调试技巧、文件I/O、算法与数据结构以及游戏设计原则。通过实际编写小游戏,你将掌握这些知识点,并增强解决问题和调试代码的能力。从简单的猜数字游戏开始...

weixin_42573757的博客 1988

【趣味小游戏】--关机程序和猜数字小游戏

前面几篇文章分享了c语言的部分知识,这一篇文章让我们想利用前面所学内容来完成一个关机程序和猜数字小游戏吧·~

会当凌绝顶,一览众山小 1459

C语言实现猜数字游戏项目教程

C语言是一种通用的编程语言,由Dennis Ritchie于1972年在AT&T的贝尔实验室开发。它以简洁的语法和强大的功能特性而广受好评,特别是在系统软件和应用软件开发领域。错误处理是指在程序运行过程中,对发生的异常情况或非预期情况的检测、诊断和处理。有效的错误处理能够确保程序在遇到错误时不会直接崩溃,而是能够以一种可控的方式通知用户或者开发者问题所在,并采取措施避免程序异常终止。通过本章节的讲解,读者应该已经掌握了在C语言中进行有效错误处理的核心概念和实践技巧。

weixin_28895791的博客 1104

System Verilog学习笔记(十九)——覆盖率

覆盖率是用来衡量验证精度和完备性的数据指标。也可以告诉我们在仿真时设计的哪些结构被触发,哪些没被触发。高质量的验证需要满足以下三个条件。

ljy77882333的博客 2144

C语言学习路径指南:从入门到精通

C语言学习路径指南

Yikefore的博客 3516

SAP 人力资源工资配置项3---工资项配置

工资项设置

xiouluoyang的专栏 1万+

C语言初阶——猜数字等等

C语言初阶第三课

qq_66103518的博客 1504

西电微机系统课程设计步进电机开环控制系统

** 微机系统与应用课程设计 课题二 步进电机开环控制系统设计** 一、程设计目的 掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。 加深对 A/D 和并行接口芯片的工作方式和编程方法的理解。 搞懂步进电机的工作原理及控制方式,掌握开环控制系统的设计思路和实现方法。 二、课程设计的内容 手动调节电位器旋钮(0V~5V),通过 ADC0809 模拟输入水库水位 0 米~50...

qq_37015775的博客 4040

DAIC-WOZ数据集文件结构详解:CLNF特征文件、音频转录与PHQ8评分全解读

本文深入解析DAIC-WOZ数据集的文件结构,重点介绍CLNF特征文件、音频转录与PHQ8评分的详细内容。通过多模态数据处理实战指南,帮助研究者高效利用这一抑郁分析领域的重要资源,掌握面部动作单元、声学特征和文本转录的科学解读与应用技巧。

weixin_29159711的博客 185

C语言小游戏设计

C语言小游戏的设计及有关函数的使用方法和理解 1.猜数字游戏 2.扫雷游戏

2503_92189321的博客 914

高通 vs MTK vs 海思:三大平台 ISP 架构横向对比与实战差异分析

随着移动影像能力成为智能终端差异化竞争的核心维度,ISP(Image Signal Processor)架构日益重要。高通、MTK、海思三大 SoC 厂商在 ISP 设计上各具特色,不仅在图像处理链路、模块集成度、算法加速路径等方面存在显著差异,同时也决定了终端厂商在成像质量、调试复杂度与扩展能力上的实际表现。本文将基于真实平台项目经验,横向对比三大主流平台的 ISP 架构关键指标,系统分析其在实际开发过程中的能力边界、工程成本与调优空间,帮助工程师更精准地进行平台选型与优化策略制定。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3934

C语言关机小游戏与猜数字小游戏

上次我们学习了分支与循环结构,今天我们根据上次学习的语法来完成这两个小游戏。

2401_86945837的博客 605

【Bug已解决】[Bug]: ValueError: No user query found in messages QWEN 3.5 27B VLLM 0.16.0 NIGHTLY 解决方案

用 vLLM 0.16.0 nightly 给发聊天请求时,服务端在处理消息时抛ValueError,请求失败。

博客 414

YOLO126优化:损失篇 | AAAI 2025 | 一种基于尺度的动态(SD)损失,根据目标大小动态调整尺度和位置损失的影响,提高了网络检测不同尺度目标的能力

提出了一种基于尺度的动态(SD)损失,它根据目标大小动态调整尺度和位置损失的影响,提高了网络检测不同尺度目标的能力。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 448

C语言猜数字游戏实现

用C语言 从无到有写猜数字小游戏

Welcome to Claffic's blog ! ! ! 3240

YOLO26 正式发布源代码!极致速度优化方案, 面向工业级落地的目标检测模型!

YOLO26 作为 Ultralytics 公司于 2025 年 9 月发布的最新一代目标检测模型,在架构设计和技术实现上展现了显著的创新。本文深入分析了 YOLO26 的核心架构改进和技术原理,重点探讨了其在边界框回归、推理流程、损失函数设计和优化算法方面的突破性进展。

魔改工程师的博客 1245

编程趣味实践:3个C语言小游戏带你玩转基础与逻辑

在我们学习完C语言分支,循环语句之后,我们可以尝试写一个关机小游戏游戏功能:在一分钟之内输入“我是猪”,否则电脑就会关机在这个游戏里,我们需要学习,如何通过C语言程序实现电脑的关机这里我们学习几个cmd命令win+R打开命令窗口 输入shutdown -s 之后我们的电脑就会在一分钟之后关机 当然我们还可以输入shutdown -s -t 加一个数字,来控制关机的时间例如我输入shutdown -s -t 30,就是30秒之后关机同样,我们在命令窗口输入shutdown -a 就可以取消关机 在学完这个

emtai486的博客 1096

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C语言实现随机数,及猜数字小游戏

最近在复习c的知识,想起之前写过一个猜数字小游戏,所以今天就把自己关于随机数的使用经验分享一下,希望对大家有帮助。

2301_79551553的博客 960

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

十三、初阶C语言之数组

在上述代码中介绍了二维数组的几种定义方式和初始化方法,arr是直接指定行数和列数,并且初始化的时候是进行了完全初始化,二维数组在初始化的时候,当不是用模块式写法的时候,以上述代码为例,就是以四个为一行不够的用0补齐。模块化写法就是arr1的写法,这时三行中的数都指定了,如果不够四个就在后面用0补齐。值得注意的是:二维数组的行数可以不给定,但列数必须给定,行数系统自己数。三维等都只有第一个能省略。

2501_92882333的博客 1152

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C语言指针初级

指针是内存中一个最小单元的编号,也就是地址。通常口语中的指针,通常指的是指针变量,是用来存放内存地址的变量。每一个变量的创建,编译器都会给它分配一块空间来存储,而变量在这些空间中以二进制补码的形式存储,不了解补码的可以去看C语言操作符详解中有详细介绍。每一块内存空间都有对应的地址编号,这些地址在内存中是连续的,像门牌号一样,指针就相当于日常生活中的门牌号,通过某人的门牌号,就可以找到这个人。同样,拿到了指向某个变量的指针,就可以通过解引用,找到这个变量,然后对这个变量进行操作。

2501_90251128的博客 806

初阶学习 C 语言可以编写的程序以及个人的理解记录

学习初阶C语言的笔记

L_Z_J_I的博客 1338

用C语言编写猜数字游戏

在编写一个猜数字游戏之前,我们来做一些铺垫工作: 1.函数铺垫 (1)rand:该函数是用来产生一个随机数(每次产生的随机数相同)。如:rand()%100相当于产生一个0~99之间的随机数; (2)srand:该函数作用是在调用rand函数之前,去设置随机数 产生器,使得每次产生的随机数不同。(在一个程序内部被调用一次即可); (3)time:该函数返回一个从当前时间点到计算机起始时间(

cherrydreamsover的博客 1万+

适合新手的C语言开源项目

学习 C 语言最好的方式之一就是通过实际项目来练习和应用所学的知识。以下是一些适合新手的 C 语言开源项目和练习方向,涵盖从简单到稍复杂的内容,帮助你逐步提升编程能力。通过这些项目,你不仅能巩固 C 语言知识,还能逐步掌握更高层次的编程技能。这些项目适合刚入门的程序员,重点是熟悉 C 的语法和基本功能。以下项目可以帮助你更好地理解 C 在系统编程中的应用。这些项目稍微复杂一些,但更具有实用性。

小宝哥Code的专栏 2919

C语言实战编程:从基础算法到小游戏开发

本文是一份C语言实战编程指南,旨在帮助初学者通过项目实践掌握核心编程思维。内容涵盖从开发环境搭建、基础算法(如阶乘计算、二分查找)到趣味小游戏(猜数字、三子棋)的开发全过程,强调通过动手实践理解变量、函数、指针等C语言核心概念,为后续深入学习打下坚实基础。

u8v9w0x1y的博客 430
上一篇: 脑机接口进医院:读心的想法退让,先治好癫痫再说
下一篇: C语言初阶:分支与循环(少量数组)
爱聊灵光的维C
博客等级 码龄120天 53粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值