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

