我看过一些关于使用C生成随机数的指南: 有两件事让我感到疑惑:
在示例中,srand函数按以下方式编写:
srand((unsingned int)time(NULL);
我正在使用代码块,并且它在没有unsigned int和数学库的情况下正常工作,那么为什么它们会在示例中包含它?
谢谢!
答案 0 :(得分:3)
函数time
返回time_t
值,而srand
期望unsigned int
参数。如果没有强制转换,编译器可能会产生警告,并且根据编译器标志,这可能导致编译失败。一般来说,避免警告是一种好习惯。
您显示的行中没有任何内容需要包含math.h
。可能这个评论指的是代码的其他部分?
答案 1 :(得分:3)
我需要'(unsigned int)'在' time(null)'之前在c?
中的srand函数中
time()返回time_t类型的变量。在编译器上对应的类型大小是实现定义的。您必须检查编译器文档。
据说除了stdlib.h和time.h库之外我还要包含math.h库才能工作,为什么呢?
对于发布的行,不需要math.h。很可能它是代码的其他部分所需要的。
答案 2 :(得分:0)
您不需要包含数学库。
该示例大部分时间都有效,但在技术上不正确,因为转换为不兼容的类型无效。
唯一正确的方法是散列变量time_t的字节。
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] ;
然后在srand()函数中使用hash。
您可以转换为char *然后使用指针。 哈希函数非常简单,您可能希望选择更好的哈希函数。