在函数中使用 srand()
Using srand() within a function
我正在学习如何在 C 中使用 "rand()" 和 "srand()"。在我正在阅读的书中,它要求修改生成随机数的程序,以便用户提供种子.这确保了数字是随机的。我可以直接使用下面的基本代码生成新数字,但是当我尝试在它下面的程序中使用它时它不会工作。
int main()
{
int seed;
srand(seed);
printf("Please enter a seed: ");
scanf("%d", &seed);
printf("The random number is: %d\n", rand());
return (EXIT_SUCCESS);
}
这是我在获取 "srand() to work in below. I have tried asking the user for the seed in "main" 时遇到问题的程序,而不是 prn_random_numbers 函数和我能想到的所有其他功能。它仍然只表现得像 "rand()" 和无论我输入的种子是什么,都吐出相同的数字。我做错了什么?不幸的是,这本书没有给出任何练习的答案。我非常感谢任何帮助。我只是在自学。
max(x, y)
int x, y;
{
if (x > y)
return (x);
else
return (y);
}
min(x, y)
int x, y;
{
if (x < y)
return (x);
else
return (y);
}
prn_random_numbers(k) /* print k random numbers */
int k;
{
int i, r, smallest, biggest;
int seed;
srand(seed);
printf("Please enter a seed: ");
scanf("%d", &seed);
r = smallest = biggest = rand();
printf("\n%12d", r);
for (i = 1; i < k; ++i)
{
if (i % 5 == 0)
printf("\n");
r = rand();
smallest = min(r, smallest);
biggest = max(r, biggest);
printf("%12d", r);
}
printf("\n\n%d random numbers printed.\n", k);
printf("Minimum:%12d\nMaximum:%12d\n", smallest, biggest);
}
int main()
{
int n;
printf("Some random numbers are to be printed.\n");
printf("How many would you like to see? ");
scanf("%d", &n);
while (n < 1)
{
printf("ERROR! Please enter a positive integer.\n");
printf("How many would you like to see? ");
scanf("%d", &n);
}
prn_random_numbers(n);
return (EXIT_SUCCESS);
}
第 1 部分
在第一个代码块中,您使用未初始化的变量调用 srand()
— 这不好。您需要在从用户那里读取种子之后移动该调用。您还应该检查输入的结果是否有效。
int main(void)
{
int seed;
printf("Please enter a seed: ");
if (scanf("%d", &seed) != 1)
{
fprintf(stderr, "Failed to read seed - exiting\n");
return EXIT_FAILURE;
}
srand(seed);
第 2 部分
在第二个代码块中,您正在编写 K&R 风格的函数定义。
不要!!!
是的,如果可以的话,我会大声喊叫。如果你的教科书教你这种风格,把这本书扔进垃圾桶,再拿另一本书。在新代码中使用 K&R 风格的定义,你必须有一个特别的理由。原型已经通过标准编译器提供了大约 30 年,并且已经普遍可用了 20 年。
您在第二个示例中调用 srand()
的代码也存在与第一个示例相同的缺陷 — 在从用户那里获得种子之前调用该函数。
此外,每次程序 运行 时用户提供不同种子的机会几乎为零。你声称它 "ensures the numbers are random" 是一个非常乐观的观点。
我正在学习如何在 C 中使用 "rand()" 和 "srand()"。在我正在阅读的书中,它要求修改生成随机数的程序,以便用户提供种子.这确保了数字是随机的。我可以直接使用下面的基本代码生成新数字,但是当我尝试在它下面的程序中使用它时它不会工作。
int main()
{
int seed;
srand(seed);
printf("Please enter a seed: ");
scanf("%d", &seed);
printf("The random number is: %d\n", rand());
return (EXIT_SUCCESS);
}
这是我在获取 "srand() to work in below. I have tried asking the user for the seed in "main" 时遇到问题的程序,而不是 prn_random_numbers 函数和我能想到的所有其他功能。它仍然只表现得像 "rand()" 和无论我输入的种子是什么,都吐出相同的数字。我做错了什么?不幸的是,这本书没有给出任何练习的答案。我非常感谢任何帮助。我只是在自学。
max(x, y)
int x, y;
{
if (x > y)
return (x);
else
return (y);
}
min(x, y)
int x, y;
{
if (x < y)
return (x);
else
return (y);
}
prn_random_numbers(k) /* print k random numbers */
int k;
{
int i, r, smallest, biggest;
int seed;
srand(seed);
printf("Please enter a seed: ");
scanf("%d", &seed);
r = smallest = biggest = rand();
printf("\n%12d", r);
for (i = 1; i < k; ++i)
{
if (i % 5 == 0)
printf("\n");
r = rand();
smallest = min(r, smallest);
biggest = max(r, biggest);
printf("%12d", r);
}
printf("\n\n%d random numbers printed.\n", k);
printf("Minimum:%12d\nMaximum:%12d\n", smallest, biggest);
}
int main()
{
int n;
printf("Some random numbers are to be printed.\n");
printf("How many would you like to see? ");
scanf("%d", &n);
while (n < 1)
{
printf("ERROR! Please enter a positive integer.\n");
printf("How many would you like to see? ");
scanf("%d", &n);
}
prn_random_numbers(n);
return (EXIT_SUCCESS);
}
第 1 部分
在第一个代码块中,您使用未初始化的变量调用 srand()
— 这不好。您需要在从用户那里读取种子之后移动该调用。您还应该检查输入的结果是否有效。
int main(void)
{
int seed;
printf("Please enter a seed: ");
if (scanf("%d", &seed) != 1)
{
fprintf(stderr, "Failed to read seed - exiting\n");
return EXIT_FAILURE;
}
srand(seed);
第 2 部分
在第二个代码块中,您正在编写 K&R 风格的函数定义。
不要!!!
是的,如果可以的话,我会大声喊叫。如果你的教科书教你这种风格,把这本书扔进垃圾桶,再拿另一本书。在新代码中使用 K&R 风格的定义,你必须有一个特别的理由。原型已经通过标准编译器提供了大约 30 年,并且已经普遍可用了 20 年。
您在第二个示例中调用 srand()
的代码也存在与第一个示例相同的缺陷 — 在从用户那里获得种子之前调用该函数。
此外,每次程序 运行 时用户提供不同种子的机会几乎为零。你声称它 "ensures the numbers are random" 是一个非常乐观的观点。