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
相关产品推荐
相关产品推荐

