我需要';(无符号整数)和#x27;在'之前;时间(空)和#x27;在srand函数中使用c?
我看过一些关于用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需要一个无符
srand((unsingned int)time(NULL);
谢谢 函数
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通常比现在的未签名的时间范围更大。谢谢!由于假期的关系,我花了一些时间来回复。