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链比较猜测值与目标值,提供反馈

• 三种情况分别处理:过大、过小、正确

程序执行流程

  1. 初始化:设置随机种子,生成目标数字
  2. 提示信息:显示游戏开始信息
  3. 循环猜测:重复读取输入、比较、反馈的过程
  4. 结束判断:猜中后显示统计信息并退出

可能的改进扩展

// 可以添加输入验证
if (cin.fail()) {
    cout << "请输入有效的数字!" << endl;
    cin.clear();
    cin.ignore(1000, '\n');
    continue;
}

// 或者添加难度选择
int maxNumber = 100;
int maxAttempts = 10;  // 限制猜测次数

这个程序很好地展示了C++的基本语法:变量声明、输入输出、条件判断和循环控制,是学习编程逻辑的优秀示例。

设计思路

生成随机数
使用 <random> 库中的 std::random_devicestd::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;
}

完整结构

  1. 初始化随机数生成器并生成目标值。
  2. 进入主循环,处理用户输入并验证。
  3. 比较输入与目标值,提供反馈或退出条件。

此设计确保代码健壮性(如处理非法输入)、可读性(模块化逻辑)和功能性(满足游戏核心需求)。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐