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