[英]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.