【问题标题】:Store and print random numbers in an array in C在 C 中的数组中存储和打印随机数
【发布时间】:2012-09-23 21:10:41
【问题描述】:

我需要使用指针将 500 到 600 之间的随机数存储到一个数组中,然后打印出这些数字。我收到分段错误...核心转储,我不太明白这意味着什么。错误发生在 printf 语句之后 ("%15d\n", aPtr[i]);

int main(){
    int size;
    int j, i;
    int temp;
    int sum = 0;


    printf("Enter size of array");
    scanf("%d", &size);


    int array[size];
    int *aPtr = malloc(sizeof(int) * size);

    for (i = 0; i <= size; i++){
         srand(time(NULL));
         aPtr[i] = rand() % 500 + 100;
         printf("%15d\n", aPtr[i]);

【问题讨论】:

  • Church,对您的问题进行大规模更改不是一个好主意,这会使人们给出的答案无效。只要您遵循该准则,请务必添加详细信息。我已经回滚了更改。
  • 注意!对不起,仍然是该网站的新手,试图正确地表达我的问题:(

标签: c arrays pointers random


【解决方案1】:

i &lt;= size; 应该是i &lt; size;

如果您有一个包含 50 个项目的数组,则有效索引为 [0,49]。

【讨论】:

    【解决方案2】:

    您只需调用 srand (初始化随机数生成器)一次。把它移出for。如果你想要 500 到 600 之间的随机数,你需要在 0 到 100 之间生成它们(rand() % 101),然后加上 500。

    【讨论】:

    • 这给了我一个 100 不是声明的错误,我还有什么遗漏的吗?
    • 去掉这一行的100 aPtr[i] = (100 (rand() % 101) + 500);
    • 应该是 aPtr[i] = ((rand() % 101) + 500);
    【解决方案3】:

    您需要在进入循环之前调用srand

    就目前而言,您将获得一长串相同的数字,因为您每次都将随机数生成器重置为相同的种子(假设时间没有改变,这很可能)。此外,如果您想要介于 500 和 600 之间的数字,那么您的公式是错误的。试试这个 sn-p:

    srand(time(NULL));
    for (i = 0; i < size; i++){
        aPtr[i] = (rand() % 101) + 500;
        printf("%d\n", aPtr[i]);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 2014-05-10
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多