【问题标题】:Instead of random, it generates sequence of numbers [closed]它不是随机的,而是生成数字序列[关闭]
【发布时间】:2019-06-23 16:56:09
【问题描述】:

我想生成 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,每次执行中只有第一个数字是随机的,其他数字是连续的。

【问题讨论】:

  • *(array + y)(*array + y) 不一样。如果你使用通用符号array[y],这个讨厌的错字可能就不会发生了。
  • 请注意,对于任何指针或数组p 和索引i,表达式*(p + i)完全等于p[i]。后者通常更易于阅读,编写更少,并且还可以避免像您遇到的错误那样的错误。
  • *(pointer + integer)pointer[integer] 100% 完全相同。请注意,在这类表达式中使用数组标识符会隐式地从数组类型转换为指针类型。

标签: c for-loop pointers random


【解决方案1】:

您很可能打印了错误的值。

您需要在printf() 语句中将(*array+ y) 更改为*(array+ y),否则,您最终会打印第一个随机数的值以及迭代计数器(它解释了您获得的输出)。

只是添加一些自以为是的观点: 数组索引运算符[] 在那里,有些人选择更喜欢使用它来避免像这样的错误。您的陈述可以很容易地重写以利用它,例如

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]);
}

也就是说,

【讨论】:

    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2023-01-22
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    相关资源
    最近更新 更多