【C++练习】29. 生成随机数,用户猜测并提示大小
·
29. 生成随机数,用户猜测并提示大小
完整代码示例
#include <iostream>
#include <cstdlib> // 包含rand()和srand()函数
#include <ctime> // 包含time()函数
using namespace std;
int main() {
// 1. 初始化随机数种子
srand((unsigned int)time(NULL));
// 2. 生成1-100的随机数
int target = rand() % 100 + 1;
int guess;
int attempts = 0;
cout << "=== 猜数字游戏 ===" << endl;
cout << "我已经想了一个1-100之间的数字,来猜猜看吧!" << endl;
// 3. 主游戏循环
while (true) {
cout << "请输入你的猜测: ";
cin >> guess;
attempts++;
// 4. 判断猜测结果
if (guess > target) {
cout << "太大了!往小一点猜。" << endl;
} else if (guess < target) {
cout << "太小了!往大一点猜。" << endl;
} else {
cout << "恭喜你!猜对了!" << endl;
cout << "你用了 " << attempts << " 次猜中了数字 " << target << endl;
break; // 退出循环
}
// 可选:添加猜测次数提示
if (attempts % 5 == 0) {
cout << "[提示] 你已经猜了 " << attempts << " 次,继续加油!" << endl;
}
}
cout << "游戏结束,谢谢游玩!" << endl;
return 0;
}
代码详细解析
1. 头文件包含
#include <iostream> // 输入输出功能(cout, cin)
#include <cstdlib> // 随机数函数(rand(), srand())
#include <ctime> // 时间函数(time())
• iostream 提供标准输入输出功能,是C++最基本的I/O库
• cstdlib 包含随机数生成函数rand()和srand()
• ctime 提供时间函数,用于生成随机数种子
2. 随机数生成原理
srand((unsigned int)time(NULL));
int target = rand() % 100 + 1;
• srand() 设置随机数种子,使用当前时间time(NULL)确保每次运行程序得到不同的随机序列
• rand() % 100 + 1 生成1-100的随机数:
• rand() 返回0到RAND_MAX之间的随机整数
• % 100 取余数得到0-99的范围
• + 1 将范围调整为1-100
3. 游戏循环结构
while (true) {
// 游戏逻辑
if (条件) {
break; // 退出循环
}
}
• while (true) 创建无限循环,直到玩家猜对数字
• break 语句在猜对时退出循环
• 这种结构确保游戏持续进行直到满足结束条件
4. 输入验证和比较逻辑
cin >> guess;
if (guess > target) {
cout << "太大了!";
} else if (guess < target) {
cout << "太小了!";
} else {
cout << "恭喜你!";
break;
}
• cin >> guess 读取玩家输入
• 使用if-else链比较猜测值与目标值,提供反馈
• 三种情况分别处理:过大、过小、正确
程序执行流程
- 初始化:设置随机种子,生成目标数字
- 提示信息:显示游戏开始信息
- 循环猜测:重复读取输入、比较、反馈的过程
- 结束判断:猜中后显示统计信息并退出
可能的改进扩展
// 可以添加输入验证
if (cin.fail()) {
cout << "请输入有效的数字!" << endl;
cin.clear();
cin.ignore(1000, '\n');
continue;
}
// 或者添加难度选择
int maxNumber = 100;
int maxAttempts = 10; // 限制猜测次数
这个程序很好地展示了C++的基本语法:变量声明、输入输出、条件判断和循环控制,是学习编程逻辑的优秀示例。
设计思路
生成随机数
使用 <random> 库中的 std::random_device 和 std::mt19937 生成高质量的随机数引擎。通过 std::uniform_int_distribution 指定随机数的范围(例如 1 到 100)。
#include <random>
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 100);
int target = dis(gen);
用户输入处理
通过循环结构(如 while)持续接收用户的猜测输入。使用 std::cin 读取用户输入,并验证输入是否为有效整数(避免非法输入导致程序崩溃)。
int guess;
while (true) {
std::cout << "Enter your guess: ";
if (std::cin >> guess) {
break;
} else {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "Invalid input. Please enter a number.\n";
}
}
比较逻辑
将用户输入与生成的随机数比较,给出“太大”、“太小”或“正确”的提示。若猜测正确,退出循环并结束游戏;否则继续循环。
if (guess > target) {
std::cout << "Too big!\n";
} else if (guess < target) {
std::cout << "Too small!\n";
} else {
std::cout << "Correct! The number was " << target << "\n";
break;
}
完整结构
- 初始化随机数生成器并生成目标值。
- 进入主循环,处理用户输入并验证。
- 比较输入与目标值,提供反馈或退出条件。
此设计确保代码健壮性(如处理非法输入)、可读性(模块化逻辑)和功能性(满足游戏核心需求)。
更多推荐


所有评论(0)