我需要';(无符号整数)和#x27;在'之前;时间(空)和#x27;在srand函数中使用c?

我需要';(无符号整数)和#x27;在'之前;时间(空)和#x27;在srand函数中使用c?,c,random,srand,C,Random,Srand,我看过一些关于用C生成随机数的指南: 有两件事让我疑惑: 据说,除了stdlib.h和time.h库之外,我还必须包含math.h库才能使其工作,为什么?(请问srand和rand函数在stdlib中) 在本例中,srand函数的编写方式如下: srand((unsingned int)time(NULL); 我使用的是代码块,它在没有unsigned int和数学库的情况下可以正常工作,那么为什么它们会在示例中包含它呢 谢谢 函数time返回一个time\u t值,而srand需要一个无符

我看过一些关于用C生成随机数的指南: 有两件事让我疑惑:

  • 据说,除了stdlib.h和time.h库之外,我还必须包含math.h库才能使其工作,为什么?(请问srand和rand函数在stdlib中)
  • 在本例中,srand函数的编写方式如下:

    srand((unsingned int)time(NULL);
    
  • 我使用的是代码块,它在没有unsigned int和数学库的情况下可以正常工作,那么为什么它们会在示例中包含它呢


    谢谢

    函数
    time
    返回一个
    time\u t
    值,而
    srand
    需要一个
    无符号int
    参数。如果没有强制转换,编译器可能会产生警告,这可能会导致编译失败,具体取决于编译器标志。一般来说,避免警告是一种良好的做法


    您显示的行中没有任何内容需要包含
    math.h
    。可能这个注释引用了代码的其他部分

    您不需要包含数学库

    该示例大部分时间都有效,但在技术上是不正确的,因为强制转换到不兼容的类型是无效的

    唯一正确的方法是散列可变时间的字节

    time_t t = time( NULL ) ;
    char* p = ( char* )&t ; 
    unsigned int hash = 0 ;
    
    for( int i = 0 ; i < sizeof( time_t ) ; i++ )  
        hash += p[i] ;
    
    time\u t=time(空);
    char*p=(char*)&t;
    无符号整数散列=0;
    对于(int i=0;i
    然后在srand()函数中使用哈希

    您可以强制转换为char*,然后使用指针。 哈希函数非常简单,您可能想选择一个更好的

    在c中的srand函数中,是否需要在“time(null)”之前加上“(unsigned int)”

    time()返回类型为time\t的变量。这在编译器上对应的类型大小是由实现定义的。您必须检查编译器文档

    据说,除了stdlib.h和time.h库之外,我还必须包含math.h库才能使其工作,为什么


    对于张贴的行,不需要math.h。很可能代码的其他部分也需要它。

    您能提供指南的链接吗?您试过了吗?如果省略
    math.h
    ,编译器会返回什么错误(如果有)?它可能会给你一些线索。另外,请查看
    time()
    返回的类型,以及
    srand()
    所期望的。时间的类型是整数还是浮点?+1用于解释类型的更改,以及避免警告的良好实践<代码>时间\u t
    通常比现在的
    未签名的时间范围更大。谢谢!由于假期的关系,我花了一些时间来回复。