使用两个函数生成指定范围随机数数组时遇问题
问题排查与修正方案
我来帮你把这段生成随机数组的代码改对,咱们一步步拆解问题:
1. 随机数生成的种子缺失
你用了rand()函数,但没初始化随机数种子——这会导致每次运行程序时,生成的随机数序列完全一模一样!
解决方法很简单:在调用cria_aleatorio函数之前,加上srand(time(NULL));,记得要包含<time.h>头文件,让随机数种子随系统时间变化,每次运行都能生成不同的随机序列。
2. 打印函数的致命错误
你的print_vetor函数有两个严重问题:
- 数组索引越界:数组的下标是从0开始的,
vetor[tamanho]已经超出了数组的有效范围(最后一个元素是vetor[tamanho-1]),这会触发未定义行为,可能打印垃圾值甚至导致程序崩溃。 - 没有遍历数组:函数里只执行了两次
printf,根本没循环遍历整个数组,自然没法打印所有元素。
修正后的完整代码
#include <stdio.h> #include <stdlib.h> #include <time.h> void cria_aleatorio(int *vetor, int tamanho, int min, int max) { int i; for(i=0; i<tamanho; i++) { vetor[i] = (rand() % (max - min + 1)) + min; } } void print_vetor(int *vetor, int tamanho){ int i; printf("数组元素:"); for(i=0; i<tamanho; i++) { printf("%d ", vetor[i]); } printf("\n数组长度:%d\n", tamanho); } int main() { int arr[10]; // 初始化随机数种子 srand(time(NULL)); cria_aleatorio(arr, 10, 1, 100); print_vetor(arr, 10); return 0; }
修正说明
- 给
print_vetor添加了循环,遍历数组的每个元素并打印; - 加上了清晰的输出提示,让结果更容易阅读;
- 在
main函数里添加了随机数种子的初始化,保证每次运行生成不同的随机数组; - 保留了你原本正确的随机数生成公式
(rand() % (max - min + 1)) + min——这个公式是对的,能生成[min, max]范围内的整数随机数。
内容的提问来源于stack exchange,提问作者user9856905
相关产品推荐
相关产品推荐

