问题描述:
分析下面的代码和结果回答下面的问题。在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
关键点分析
-
随机数生成器:
get_random_num(int min, int max)
函数用于生成一个指定范围内的随机整数。- 使用
random_device
生成一个种子,然后使用mt19937
引擎生成随机数,最终通过uniform_int_distribution
生成一个均匀分布的随机数。
-
for循环:
for
循环的格式通常包含初始化、条件判断和循环因子变化三部分:for (init; condition; increment) { // loop body }
- 在这个例子中,
for
循环省略了循环因子更新语句,只利用is_continue
这个布尔变量来控制循环是否继续执行。
-
条件判断与用户交互:
- 首先让用户输入一个猜测值。
- 在
for
循环内部,根据用户输入的值与生成的随机数进行比较:- 如果猜对了,打印“恭喜你猜对了!”并将
is_continue
设为false
,从而结束循环。 - 如果猜错了,根据猜测的值是大于还是小于随机数,分别给出提示并要求用户重新输入。
- 如果猜对了,打印“恭喜你猜对了!”并将
- 通过不断更新
guess_num
变量的值,用户有机会不断修正猜测,直到找到正确答案。
-
无限循环的实现:
- 由于省略了
for
循环中的循环因子变化部分,循环将一直运行直到is_continue
变为false
。这一点在猜对数字时通过if
条件判断来控制。
- 由于省略了
关键点总结
- 无限循环:通过省略
for
循环中的循环因子变化,结合is_continue
这个布尔变量,实现了无限循环的效果。 - 用户交互:通过用户输入的数字与随机数进行比较,动态调整循环因子的值,从而控制循环的退出。
- 灵活的循环控制:这种模式允许在循环体内进行复杂的条件判断和控制,非常适合类似猜数字这样的交互式程序。