【问题标题】:rand() doesn't give me random numbers [closed]rand() 没有给我随机数[关闭]
【发布时间】:2019-05-19 20:56:54
【问题描述】:

我想打印保存在数组中的 1000 个随机数。数字必须在 1 到 10000 之间。

我将srand(time(NULL)) 放入我的main 函数中,并且该数组必须在我的init 函数中填充随机数。 ausgabe 函数用于格式化输出。

但是rand 用数字填充我的数组。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ARR_SIZE 1000

void init(int * ptr, int size){
    for (int i = 0; i < size; i++){
        *(ptr + i) = (rand() %10000+1);
    }
}

void ausgabe(int * ptr, int size){

    for (int i = 0; i < size; i++){

        printf("%5i\t", * ptr + i);

        if ((i + 1) %10 == 0){
            printf("\n");
        }

    }
    printf("\n\n");
}

int main(){
    int zufall[ARR_SIZE];

    srand(time(NULL));

    init(zufall, ARR_SIZE);
    printf("\n\t\t\t---unsortierte Ausgabe---\n\n");
    ausgabe(zufall, ARR_SIZE);

    return 0;
}

【问题讨论】:

  • printf("%5i\t", * (ptr + i));
  • @DanByström 宁可:ptr[i].
  • 谢谢它现在正在工作。

标签: c random srand


【解决方案1】:

* ptr + i(*ptr)+i,而不是 *(ptr+i)。您需要更加小心运算符优先级。 (并且要学会使用调试器:在调试器中运行 30 秒会清楚地表明问题出在打印上,而不是初始化上。)

【讨论】:

  • 当我以这种方式尝试时,我得到了这个错误:“左值需要作为赋值的左操作数 (*ptr) + i = (rand() %10000+1);”我试过 (*ptr)+i 和 ((*ptr)+i)。
  • 好的,现在可以了。谢谢你。你能告诉我如何控制输出吗?
  • 正如 Sneftel 指出的那样,* ptr + i(*ptr)+i 相同,((*ptr)+i) 也是如此。它必须是*(ptr+i)
  • @SefaSimsek init 中的分配与*(ptr+i) 一样好。错误出现在ausgabe* ptr + i 没有做你想做的事。
  • 注意你也可以把*(ptr + i)写成ptr[i]
猜你喜欢
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
相关资源
最近更新 更多