【问题标题】:How to assign a variable to rand() In C? [duplicate]如何在C中将变量分配给rand()? [复制]
【发布时间】:2012-12-30 11:43:44
【问题描述】:

可能重复:
Generate a random number within range?

我正在尝试这样做,以便在执行代码时,我可以在 命令提示符重新定义最大数并在 0 和新的最大数之间生成一个新的随机数。

我做对了吗?

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


int main()
{
    int randomnumber ;
    int max;
    srand( time(NULL) );
    scanf("Enter total number of students %d",&max);
    randomnumber=rand()% 30;
    printf("This is your random number\n %d",randomnumber);
    getchar();
    return 0;
}

【问题讨论】:

标签: c srand


【解决方案1】:

您已使用scanf 向用户发送消息,但您需要为此使用printf。试试:

printf("%s", "Enter total number of students: ");
scanf("%d",&max);

然后,您可以将 %30 更改为 %max 以给用户一个介于 0 和 max - 1 之间的数字。

randomnumber=rand()% max;

正如评论者所说,使用模来减少rand() 的范围不会给你一个好的随机分布。另外,一定要检查max是否大于0,否则会报错。

如果您想知道为什么您现在在 max 中获得大量数字,那是因为您没有明确初始化 max。对于 C 和 C++,这意味着其中可能存在垃圾数据。它不像 Java 或 C# 那样将 int 自动初始化为 0。

【讨论】:

  • 虽然值得一提的是,除非 max 除以 RAND_MAX,否则这会有偏差。
  • 当我将它更改为 %max 时,它并没有做我想要做的事情。当我输入 20 时,它给了我一些超过 20 而不是低于的数字。
  • @Tohrik 那你做错了什么。请注意,你们都没有检查 scanf 是否真的读取了您输入的正确数字,因此您应该确保 scanf() 不会返回错误,并且在调试时,如果您打印出 max 也会有所帮助可以确保它是您认为的值。
  • 另外值得注意的是,scanf() 等 I/O 可能会失败。
  • 我想知道他为什么在 printf 中放置一个占位符。
猜你喜欢
  • 1970-01-01
  • 2011-08-19
  • 2023-02-09
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 2016-04-26
  • 1970-01-01
相关资源
最近更新 更多