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

在C语言中生成0-8范围内4个不重复随机数的问题

问题解决步骤

1. 输出显示ASCII码的问题

你用printf("%d\n", winningCode[i]);打印字符数组元素时,%d格式符会将char类型元素按整数(ASCII码值)输出。要显示对应的字符数字,只需把格式符改成%c:

printf("%c\n", winningCode[0]);
printf("%c\n", winningCode[1]);
printf("%c\n", winningCode[2]);
printf("%c\n", winningCode[3]);

2. 生成范围错误(0-7而非0-8)

当前代码rand() % 8生成的是0到7的随机数,不符合你需要的0-8范围,应修改为:

int random_number = rand() % 9;

3. 生成不重复数字的问题

原代码没有去重逻辑,会出现重复数字。可以用一个布尔数组标记已使用的数字,循环生成直到拿到未使用的数值:

else{
    srand(time(NULL));
    int used[9] = {0}; // 标记0-8是否已被使用,初始全为0(未使用)
    for(int i = 0 ; i < 4 ; i++ ) {
        int random_number;
        do {
            random_number = rand() % 9; // 生成0-8的随机数
        } while(used[random_number]); // 如果已被使用,重新生成
        used[random_number] = 1; // 标记为已使用
        winningCode[i] = random_number + '0'; // 转成字符
    }
}

修正后的核心代码片段

int main(int ac, char** av) {
    char winningCode[5];
           
    if(ac>2 && av[1][0] == '-' && av[1][1]=='c'){
        for(int i=0; i<4; i++){
            winningCode[i]=av[2][i];
        }
    }
    else{
        srand(time(NULL));
        int used[9] = {0};
        for(int i = 0 ; i < 4 ; i++ ) {
            int random_number;
            do {
                random_number = rand() % 9;
            } while(used[random_number]);
            used[random_number] = 1;
            winningCode[i] = random_number + '0';
        }
    }
    winningCode[4]='\0';
    // 修改打印格式为%c
    printf("%c\n", winningCode[0]);
    printf("%c\n", winningCode[1]);
    printf("%c\n", winningCode[2]);
    printf("%c\n", winningCode[3]);
    printf("%d\n", winningCode[4]); // '\0'的ASCII是0,这部分无需修改
    // 后续原代码逻辑保持不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:20:48