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

C++中如何存储自定义随机数生成函数输出的随机值

问题根因

你当前实现的RandomNumber()返回值类型为void,仅在函数内部执行打印随机数的操作,没有将生成的数值向外传递,外部逻辑自然无法获取、存储这个随机值做后续的点数累加计算。

修复方案
  • 调整RandomNumber()的定义:将返回值类型从void改为int,移除函数内部的打印逻辑,通过return关键字把生成的随机数返回给调用方。工具函数只做单一的随机数生成职责,后续不管是21点还是骰子游戏,拿到返回值后可以自由决定是打印、累加还是做规则判断,复用性更强。
  • 游戏逻辑中调用函数时,用对应类型的变量接收返回值,即可正常存储数值、完成点数累加等计算。
代码修改示例

1. 修改随机数生成函数

基础版本(适配你当前21点1-10的点数需求):

// 返回int类型随机数,不再内置打印逻辑
int RandomNumber() {
    return (rand() % 10) + 1;
}

如果要同时适配骰子的1-6点数需求,可以给函数加范围参数,进一步提升复用性:

// 支持生成[min, max]区间的随机整数
int RandomNumber(int min, int max) {
    return rand() % (max - min + 1) + min;
}

2. 21点逻辑中接收返回值计算点数

void blackjack(int total) {
    int startstakes = 15;
    int stakes;
    int hand = 0; // 初始化手牌总点数为0

    cout << "Welcome to the Blackjack(21) table\n"
         << "How much are you adding to your initial 15 chip stake - ";

    cin >> stakes;

    cout << "New stake - " << stakes + 15 << " remaining chips - "
         << total - (stakes + 15) << endl;

    cout << "Here is your hand - ";
    // 接收第一张牌的点数,累加到总手牌
    // 用基础版本就写 RandomNumber(),用带范围参数的版本传1和10
    int first_card = RandomNumber(1, 10);
    hand += first_card;
    cout << first_card << " and ";
    // 接收第二张牌的点数
    int second_card = RandomNumber(1, 10);
    hand += second_card;
    cout << second_card << endl;

    cout << "Hit me cards: 0 - 0 - 0\n"
         << "Total = " << hand << endl;

    system("pause>0");
}

后续实现骰子游戏逻辑时,直接用变量接收RandomNumber(1,6)的返回值,就可以正常计算骰子点数,不需要重复写随机数生成逻辑。


内容的提问来源于stack exchange,提问作者armando robles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:27:18