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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:36:07