簡體   English   中英

使用rand()在C語言中生成整數的隨機序列

[英]Using rand( ) to generate a random sequence of integers in C

我試圖實現一個函數int choice_N(void),該函數生成並返回整數N(最多四個整數)的隨機列表。 我不確定我是否以正確的方式使用rand(),但這是到目前為止的結果:

int choose_N(void)
{
  int x, integer[4];
  srand ((int) time(NULL));
  for (x=0; x<4; x++)
   integer[x]=rand();
  return integer;
}

像這樣工作會循環嗎? 時間是否以正確的方式初始化?

兩個問題:最重要的是,數組integer是局部的,返回時將消失。 如果要在C中返回事物數組,則必須使調用者將其傳遞給它(請參見下文)。 其次, srand()僅應在每個程序中調用一次,因此它不屬於這樣的函數內部-它應位於main或某些類似的初始化函數中,否則對該函數的多次調用將相互關聯(最糟糕的是,他們甚至可能是相同的)。 所以這是一個更好的方法:

void choose_n(int *out, int count) {
    for (int i = 0; i < count; i += 1) {
        out[i] = rand();
    }
}

int main(int argc, char *argv[]) {
    int results[4];

    srand(time(NULL));
    choose_n(results, 4);
}

您的循環是正確的,但是您的return語句將不起作用。 數組integer是該函數的局部變量,在外部將不可用。 無論哪種情況,您的函數都應該返回int而不是數組。

而且,如果要將隨機數限制在一個范圍內,最好使用mod操作符,例如rand() % range

您不能從函數返回指向局部變量的指針。 為何看到此帖子? 是否可以在其范圍之外訪問局部變量的內存?

您必須在堆上分配數組。

更改為:

int choose_N(void)
{
  int x;
  int *integer = (int*)malloc(sizeof(int)*4);
  srand ((int) time(NULL));
  for (x=0; x<4; x++)
   integer[x]=rand();
  return integer;
}

完成后,別忘了free()內存。 如果您想了解malloc和free,可以在這里閱讀: http : //www.codingunit.com/c-tutorial-the-functions-malloc-and-free

您可以這樣定義您的choose_N()

void choose_N(int integer[4])
{
    int x;
    srand ((int) time(NULL));
    for (x=0; x<4; x++)
        integer[x]=rand();
}

像這樣使用

int integer[4];
choose_N(integer);

關於隨機部分:如果您真的想感受由time(0)播種的c rand()的隨機性,則在將其用於生成實際數字之前,應運行rand()3次。 為了證明這一點,請嘗試在打印數字時一次又一次地運行此代碼幾次。 您會注意到第一個幾乎相同。 我的:

1023384829 832292180 1773676349 957893636 
1023401636 1114767429 1248842775 1942837294 
1023418443 1397242678 724009201 780297305 

因此,您的評分應如下所示:

  srand ((int) time(NULL));
  rand(); rand(); rand();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM