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

C语言生成随机数异常:生成序列而非随机数的问题排查

问题分析与修复:生成随机数而非连续序列

嘿,我一眼就发现问题出在哪了!你生成随机数的逻辑完全没问题,但打印数组元素的时候写错了表达式,导致输出变成了连续序列。

错误原因

在第二个for循环里,你写的是:

printf("Array element %d: %d\n", y, (*array+ y));

这里的*array等价于array[0],也就是数组第一个元素的值,加上y之后,自然就变成了从第一个随机数开始的连续递增序列,而不是访问数组的第y个元素。

修复方案

把打印时的表达式改成*(array + y)(和你生成随机数时的写法一致),或者更直观的array[y],这两种写法是完全等价的。另外,建议用完动态分配的内存后用free()释放,避免内存泄漏。

修正后的完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int x;
    printf("How many elements do you want?\n");
    scanf("%d", &x);
    
    int *array = (int *)malloc(x * sizeof(int));
    // 检查malloc是否成功(可选但推荐)
    if (array == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }
    
    srand(time(NULL));
    for(int y = 0; y < x; y++) {
        *(array + y) = 2 + rand() % 99;
        // 或者写成 array[y] = 2 + rand() % 99;
    }
    
    for(int y = 0; y < x; y++) {
        printf("Array element %d: %d\n", y, array[y]);
        // 或者写成 *(array + y)
    }
    
    // 释放动态分配的内存
    free(array);
    return 0;
}

这样修改后,每次运行都会输出x个独立的随机数啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:09:49