C++猜数字游戏:如何从指定数字列表中随机选取目标数值?
解决方法
先修正你代码里的基础错误
- 赋值错误:你写的
truenumber = 1, 2, 3, ..., 10完全无效,逗号在这里是逗号运算符,最终truenumber只会被赋值为10,根本不是随机选择。 - 判断错误:
if (number = truenumber)是赋值操作,不是比较,要改成if (number == truenumber)。 - 语法错误:
else (number < truenumber)不符合语法,else后面不能加条件,直接写else即可。 - 逻辑缺陷:当前代码只判断一次,玩家猜错后输入新数字但不会再做判断,需要加循环让玩家一直猜直到猜对。
实现从1-10中随机选数的简单方案
给你两种简单易懂的方式,选顺手的用:
方式一:用传统rand()函数(入门友好)
只需加两个头文件,几行代码就能搞定:
#include <iostream> #include <cstdlib> // 提供rand()和srand()函数 #include <ctime> // 提供time()获取随机种子 using namespace std; int main() { string message = "Hello"; cout << message << endl; cout << "Lets play a game" << endl; cout << "Try to guess the number!" << endl; // 初始化随机种子,保证每次运行生成的随机数不同 srand(time(0)); // 生成1-10的随机数:rand()%10得到0-9,加1转为1-10 int truenumber = rand() % 10 + 1; int number; // 用do-while循环,让玩家持续猜测直到猜对 do { cin >> number; if (number == truenumber) { cout << "You got it right!" << endl; } else if (number > truenumber) { cout << "Too high" << endl; } else { cout << "Too low" << endl; } } while (number != truenumber); return 0; }
方式二:用C++11标准随机库(更可靠)
如果想避免rand()的局限性,用现代C++的随机工具,代码也不复杂:
#include <iostream> #include <random> // 提供现代随机数生成工具 using namespace std; int main() { string message = "Hello"; cout << message << endl; cout << "Lets play a game" << endl; cout << "Try to guess the number!" << endl; // 设置随机数生成器 random_device rd; // 获取随机种子 mt19937 gen(rd()); // 初始化生成器 uniform_int_distribution<int> dist(1, 10); // 设置1-10的均匀分布 int truenumber = dist(gen); // 生成目标随机数 int number; do { cin >> number; if (number == truenumber) { cout << "You got it right!" << endl; } else if (number > truenumber) { cout << "Too high" << endl; } else { cout << "Too low" << endl; } } while (number != truenumber); return 0; }
说明
两种方式都能实现从1-10里随机选数,且支持玩家循环猜测直到答对。第一种适合入门,代码量少;第二种是C++推荐的现代写法,随机数质量更稳定。
内容的提问来源于stack exchange,提问作者Itsuki
相关产品推荐
相关产品推荐

