C语言实现猜数字游戏:代码详解与函数解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: C语言实现猜数字游戏:代码详解与函数解析

引言

在本篇博客中,我们将通过一个简单的C语言程序实例来介绍如何实现猜数字游戏。这个程序利用了随机数生成器和用户输入来创造一个互动体验,其中包含三个关键函数:initRandomSeedgenerateRandomNumbermain 函数。下面是对每个函数的详细解释以及整个程序的Markdown格式描述。

程序头文件导入

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

这三个头文件分别用于标准输入输出操作(stdio.h)、获取当前时间(time.h)以及随机数生成(stdlib.h)。


随机数种子初始化优化

static _Bool isSrandIntialized = 0;

void initRandomSeed() {
    if (!isSrandIntialized) {
        srand((unsigned int) time(0));
        isSrandIntialized = 1;
    }
}

为了确保在整个程序生命周期内只初始化一次随机数种子,定义了一个静态布尔变量 isSrandIntializedinitRandomSeed 函数负责检查该变量状态,若尚未初始化,则调用 srand(time(0)) 来根据当前时间生成一个种子值,并将 isSrandIntialized 设置为 true,以防止重复初始化。

随机数生成函数

int generateRandomNumber(int min, int max) {
    initRandomSeed();
    return rand() % (max - min + 1) + min;
}

generateRandomNumber 函数接受两个整数参数,表示生成随机数的范围。它首先调用 initRandomSeed() 确保随机数种子已正确设置,然后使用 rand() 函数生成一个随机数,并通过取模运算保证生成的随机数位于指定区间 [min, max] 内。


主函数 main()

int main() {
    const int RANGE_MIN = 1;
    const int RANGE_MAX = 500;
    int computerNumber = generateRandomNumber(RANGE_MIN, RANGE_MAX);
    int userGuess;

    while (1) {
        printf("请输入一个%d-%d的数字:\n", RANGE_MIN, RANGE_MAX);
        scanf("%d", &userGuess);

        if (userGuess > computerNumber) {
            printf("猜大了\n");
        } else if (userGuess < computerNumber) {
            printf("猜小了\n");
        } else {
            printf("恭喜你,猜对了!\n");
            break;
        }
    }

    return 0;
}

在主函数 main() 中:

  • 定义常量 RANGE_MINRANGE_MAX 表示猜测数字的范围。
  • 使用 generateRandomNumber() 函数生成计算机选择的随机数 computerNumber
  • 启动无限循环,提示用户输入猜测的数字。
  • 判断用户输入的 userGuess 是否等于 computerNumber,并给出相应的提示信息。
  • 当用户猜中数字时,输出祝贺信息并使用 break 跳出循环。

完整代码

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

// 优化 srand 初始化,确保在整个程序生命周期内仅初始化一次随机数种子
static _Bool isSrandIntialized = 0;

void initRandomSeed() {
    if (!isSrandIntialized) {
        srand((unsigned int) time(0));
        isSrandIntialized = 1;
    }
}

int generateRandomNumber(int min, int max) {
    initRandomSeed();
    return rand() % (max - min + 1) + min;
}

int main() {
    const int RANGE_MIN = 1;
    const int RANGE_MAX = 500;
    int computerNumber = generateRandomNumber(RANGE_MIN, RANGE_MAX);
    int userGuess;

    while (1) {
        printf("请输入一个%d-%d的数字:\n", RANGE_MIN, RANGE_MAX);
        scanf("%d", &userGuess);

        if (userGuess > computerNumber) {
            printf("猜大了\n");
        } else if (userGuess < computerNumber) {
            printf("猜小了\n");
        } else {
            printf("恭喜你,猜对了!\n");
            break;
        }
    }

    return 0;
}


总结:以上C语言程序实现了经典的猜数字游戏,通过合理地组织函数,使得代码逻辑清晰,同时保证了随机数生成的一致性和有效性。

相关文章
|
1月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
90 0
|
10天前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
22 1
|
22天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
63 10
|
22天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
28 1
|
1月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
64 2
|
1月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
82 1
|
1月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
|
1月前
|
存储
atoi函数解析以及自定义类型经典练习题
atoi函数解析以及自定义类型经典练习题
37 0
|
1月前
|
SQL 监控 关系型数据库
SQL错误代码1303解析与处理方法
在SQL编程和数据库管理中,遇到错误代码是常有的事,其中错误代码1303在不同数据库系统中可能代表不同的含义
|
1月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
35 0

推荐镜像

更多