引言
在本篇博客中,我们将通过一个简单的C语言程序实例来介绍如何实现猜数字游戏。这个程序利用了随机数生成器和用户输入来创造一个互动体验,其中包含三个关键函数:initRandomSeed
、generateRandomNumber
和 main
函数。下面是对每个函数的详细解释以及整个程序的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; } }
为了确保在整个程序生命周期内只初始化一次随机数种子,定义了一个静态布尔变量 isSrandIntialized
。initRandomSeed
函数负责检查该变量状态,若尚未初始化,则调用 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_MIN
和RANGE_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语言程序实现了经典的猜数字游戏,通过合理地组织函数,使得代码逻辑清晰,同时保证了随机数生成的一致性和有效性。