在C++中,如何使用for循环实现猜数字的游戏呢?

问题描述:

分析下面的代码和结果回答下面的问题。在C++中,如何使用for循环实现猜数字的游戏呢?这里用到了for循环省略了循环因子变化这一项,普通的for循环包含了循环因子初始化、条件判断、循环因子的变化3项,省略了循环因子变化会导致无限循环,我们正是利用了无限循环来进行猜数字。不过循环因子的变化需要在for循环内部使用if判断语句进行修改。

代码

// Created by 黑马程序员.
#include "iostream"
#include "random"
using namespace std;

/**
 * for循环猜数字,提供无限次机会,猜错了提示大了或小了
 * 使用bool型作为条件判断依据,猜对了置为false,猜错了依旧是true
 * 不需要循环因子更新语句(在循环体内,通过if判断来修改)
 */
int get_random_num(int min, int max)
{
    // 创建一个随机数生成器
    random_device rd;
    mt19937 gen(rd());


    // 定义一个均匀分布的整数范围
    uniform_int_distribution<> dis(min, max);

    // 生成一个随机数并输出
    int random_number = dis(gen);
    return random_number;
}


int main()
{
    // 获取一个随机数字
    int num = get_random_num(1, 10);

    // 要求用户猜测(第一次)
    int guess_num;
    cout << "请猜测数字:" << endl;
    cin >> guess_num;

    // for循环去做判断并继续执行猜测流程了
    for (bool is_continue = true; is_continue; )
    {
        // 对猜测的内容做判断
        if (guess_num == num)
        {
            // 猜对了
            cout << "恭喜你猜对了!" << endl;
            is_continue = false;        // 手动更改循环因子的值。
        }
        else if (guess_num > num)
        {
            cout << "你猜的大了!" << endl;
            cout << "请重新猜测:" << endl;
            cin >> guess_num;           // 要求用户再次猜测
        }
        else
        {
            cout << "你猜的小了!" << endl;
            cout << "请重新猜测:" << endl;
            cin >> guess_num;           // 要求用户再次猜测
        }
    }
    return 0;
}

结果

D:\CLion_code\cmake-build-debug\CLion_code.exe
请猜测数字:
5
你猜的小了!
请重新猜测:
6
你猜的小了!
请重新猜测:
7
恭喜你猜对了!

Process finished with exit code 0

问题解答:

 

C++中使用for循环实现猜数字游戏

在这个代码示例中,我们使用for循环来实现一个简单的猜数字游戏。游戏会生成一个随机数,用户有无限次机会猜测这个数字,程序会根据用户的输入给予提示,直到用户猜对为止。

代码分析

// Created by 黑马程序员.
#include "iostream"
#include "random"
using namespace std;

/**
 * for循环猜数字,提供无限次机会,猜错了提示大了或小了
 * 使用bool型作为条件判断依据,猜对了置为false,猜错了依旧是true
 * 不需要循环因子更新语句(在循环体内,通过if判断来修改)
 */
int get_random_num(int min, int max)
{
    // 创建一个随机数生成器
    random_device rd;
    mt19937 gen(rd());


    // 定义一个均匀分布的整数范围
    uniform_int_distribution<> dis(min, max);

    // 生成一个随机数并输出
    int random_number = dis(gen);
    return random_number;
}


int main()
{
    // 获取一个随机数字
    int num = get_random_num(1, 10);

    // 要求用户猜测(第一次)
    int guess_num;
    cout << "请猜测数字:" << endl;
    cin >> guess_num;

    // for循环去做判断并继续执行猜测流程了
    for (bool is_continue = true; is_continue; )
    {
        // 对猜测的内容做判断
        if (guess_num == num)
        {
            // 猜对了
            cout << "恭喜你猜对了!" << endl;
            is_continue = false;        // 手动更改循环因子的值。
        }
        else if (guess_num > num)
        {
            cout << "你猜的大了!" << endl;
            cout << "请重新猜测:" << endl;
            cin >> guess_num;           // 要求用户再次猜测
        }
        else
        {
            cout << "你猜的小了!" << endl;
            cout << "请重新猜测:" << endl;
            cin >> guess_num;           // 要求用户再次猜测
        }
    }
    return 0;
}

执行结果

D:\CLion_code\cmake-build-debug\CLion_code.exe
请猜测数字:
5
你猜的小了!
请重新猜测:
6
你猜的小了!
请重新猜测:
7
恭喜你猜对了!

Process finished with exit code 0

关键点分析

  1. 随机数生成器

    • get_random_num(int min, int max)函数用于生成一个指定范围内的随机整数。
    • 使用random_device生成一个种子,然后使用mt19937引擎生成随机数,最终通过uniform_int_distribution生成一个均匀分布的随机数。
  2. for循环

    • for循环的格式通常包含初始化、条件判断和循环因子变化三部分:
       
      for (init; condition; increment) {
          // loop body
      }
      

    • 在这个例子中,for循环省略了循环因子更新语句,只利用is_continue这个布尔变量来控制循环是否继续执行。
  3. 条件判断与用户交互

    • 首先让用户输入一个猜测值。
    • for循环内部,根据用户输入的值与生成的随机数进行比较:
      • 如果猜对了,打印“恭喜你猜对了!”并将is_continue设为false,从而结束循环。
      • 如果猜错了,根据猜测的值是大于还是小于随机数,分别给出提示并要求用户重新输入。
    • 通过不断更新guess_num变量的值,用户有机会不断修正猜测,直到找到正确答案。
  4. 无限循环的实现

    • 由于省略了for循环中的循环因子变化部分,循环将一直运行直到is_continue变为false。这一点在猜对数字时通过if条件判断来控制。

关键点总结

  • 无限循环:通过省略for循环中的循环因子变化,结合is_continue这个布尔变量,实现了无限循环的效果。
  • 用户交互:通过用户输入的数字与随机数进行比较,动态调整循环因子的值,从而控制循环的退出。
  • 灵活的循环控制:这种模式允许在循环体内进行复杂的条件判断和控制,非常适合类似猜数字这样的交互式程序。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神笔馬良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值