我想生成x个随机数,并且一切正常,除了它给了我顺序编号而不是随机数。
#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));
srand(time(NULL));
for(int y = 0; y < x; y++){
*(array + y) = 2 + rand() % 99;
}
for(int y = 0; y <x; y++){
printf("Array element %d: %d\n", y, (*array+ y));
}
return 0;}
它给出的数字是:27 28 29 30 31,每次执行中只有第一个数字是随机的,其他的是顺序的。
答案 0 :(得分:7)
很可能您在打印错误的值。
您需要在(*array+ y)
语句中将*(array+ y)
更改为printf()
,否则,最终将输出第一个随机数的值以及迭代计数器(这将解释您的输出)得到)。
只需添加一些观点即可:数组索引运算符[]
在那里,有些人选择更喜欢使用它来避免这样的错误。您的陈述可以很容易地重新编写以利用它,例如
for(int y = 0; y < x; y++){
array[y] = 2 + rand() % 99;
}
for(int y = 0; y <x; y++){
printf("Array element %d: %d\n", y, array[y]);
}
说,
NULL
返回malloc()
,否则您可能最终取消引用NULL
,后者调用undefined behavior