You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++加法题程序中随机数生成器重复输出相同数值求助

解决C++随机加法题重复生成的问题

嘿,我太懂你遇到的这个困扰了——这可是C++新手玩随机数时经常踩的坑!问题的根源很简单:你没有给随机数生成器设置动态的种子值。

默认情况下,rand()函数会使用固定的种子(一般是1)来生成随机序列,这就导致每次调用它都会输出一模一样的数字,循环里的每道题自然就全重复了。

怎么修复?

只需要两步就能搞定:

  • 在程序最开始(比如main函数的第一行),调用一次srand(time(nullptr))。time(nullptr)会返回当前的时间戳,每次运行程序这个值都不一样,相当于给随机数生成器“换了个起点”,这样生成的序列就不会重复了。
  • 确保你是在循环内部每次生成新的随机数,而不是只生成一次然后反复用。

修正后的完整代码示例

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

void additionProblem(int topNumber, int bottomNumber) {
    int userAnswer;
    cout << "\n\n  " << topNumber << " + " << bottomNumber << " = ";
    cin >> userAnswer;
    if (userAnswer == topNumber + bottomNumber) {
        cout << "答对啦!真棒😉";
    } else {
        cout << "哎呀答错了,正确答案是 " << topNumber + bottomNumber << "哦";
    }
}

int main() {
    // 初始化随机种子,注意:只需要调用一次!
    srand(time(nullptr));

    // 循环生成5道不同的加法题
    for (int i = 0; i < 5; ++i) {
        // 这里生成0-99的随机数,你可以按需调整范围
        int num1 = rand() % 100;
        int num2 = rand() % 100;
        additionProblem(num1, num2);
    }

    return 0;
}

关键注意点

  • 千万别把srand(time(nullptr))放进循环里!因为计算机运行速度太快,循环内的时间戳可能完全一样,反而会导致生成相同的随机数。
  • 如果想调整数值范围,比如生成1-50的数,可以写成rand() % 50 + 1——%50会得到0-49,加1就变成1-50啦。

内容的提问来源于stack exchange,提问作者Paulo Manalo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:09:10