C语言掷骰子游戏集成指针后输出规律图案而非随机数问题求助
问题排查
你的代码存在4处明显错误,正好对应你遇到的规律输出问题:
- for循环重复自增:tossDie函数的for循环本身已经配置了x逻辑,你在循环体内又额外加了一次x,导致每次循环x总共加2,只有下标为0、2、4的元素会被赋值,剩下的1、3、5位保持初始化的0值,这是输出出现间隔0的核心原因。
- 随机数仅生成一次:你把randomNum的生成逻辑放在了for循环外,6个元素用的都是同一个随机数值,所以所有非0位的数值完全相同。
- 随机种子初始化位置错误:
srand(time(NULL))只需要在程序启动时执行一次,你放在tossDie函数里,如果短时间多次调用该函数会拿到相同的随机种子,导致随机数重复。 - 缺少time头文件:time()函数需要引用
<time.h>头文件,部分编译器会直接报错。
修复后的完整代码
#include <stdio.h> #include <stdlib.h> // 新增time头文件 #include <time.h> void tossDie(int []); int main() { // 随机种子全局仅初始化一次 srand(time(NULL)); int diceArray[6] = { 0 }; int num = 0; int x; do { printf("\nHow many dice would you like to roll? Please enter here: "); scanf_s("%d", &num); if (num < 1 || num > 6) { printf("\n\nPlease enter a number between 1 and 6.\n\n"); } } while (num < 1 || num > 6); tossDie(diceArray); // 打印骰子结果 for (x = 0; x < num; x++) { printf("%d ", diceArray[x]); } return 0; } void tossDie(int numbers[]){ int randomNum; int x; // 随机数生成放到循环内,每个骰子单独生成随机值 for (x = 0; x < 6; x++){ randomNum = (rand() % 6) + 1; numbers[x] = randomNum; // 移除多余的x++逻辑 } }
效果验证
修复后输入对应骰子数量,会输出对应个数的1~6之间的独立随机数,不会再出现间隔0、数值重复的问题。
内容的提问来源于stack exchange,提问作者SimTim124
相关产品推荐
相关产品推荐

