user-0 提问: 关于通用c语言随机数函数的问题

回复:
user: user-1
content: 总不至于用 CoCreateGuid Creates a GUID, a unique 128-bit integer used for CLSIDs and interface identifiers.  HRESULT CoCreateGuid(   GUID  *pguid  //Pointer to the GUID on return );   Parameter pguid  [out] Pointer to the requested GUID on return.  Return Value S_OK  The GUID was successfully created.  Win32 errors are returned byUuidCreate but wrapped as an HRESULT.  Remarks The CoCreateGuid function calls the RPC function UuidCreate, which creates a GUID, a globally unique 128-bit integer. Use the CoCreateGuid function when you need an absolutely unique number that you will use as a persistent identifier in a distributed environment.To a very high degree of certainty, this function returns a unique value – no other invocation, on the same or any other system (networked or not), should return the same value.  QuickInfo   Windows NT: Use version 3.1 or later.   Windows: Use Windows 95 or later.   Windows CE: Unsupported.   Header: Declared in objbase.h.   Import Library: Included as a resource in ole32.dll.  See Also UuidCreate        吧

user: user-1
content: 延时的思路不可取。  参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c /*** *rand.c - random number generator * *       Copyright (c) Microsoft Corporation. All rights reserved. * *Purpose: *       defines rand(), srand() - random number generator * *******************************************************************************/  #include <cruntime.h> #include <mtdll.h> #include <stddef.h> #include <stdlib.h>  /*** *void srand(seed) - seed the random number generator * *Purpose: *       Seeds the random number generator with the int given.  Adapted from the *       BASIC random number generator. * *Entry: *       unsigned seed - seed to seed rand # generator with * *Exit: *       None. * *Exceptions: * *******************************************************************************/  void __cdecl srand (         unsigned int seed         ) {         _getptd()->_holdrand = (unsigned long)seed; }   /*** *int rand() - returns a random number * *Purpose: *       returns a pseudo-random number 0 through 32767. * *Entry: *       None. * *Exit: *       Returns a pseudo-random number 0 through 32767. * *Exceptions: * *******************************************************************************/  int __cdecl rand (         void         ) {         _ptiddata ptd = _getptd();          return( ((ptd->_holdrand = ptd->_holdrand * 214013L             + 2531011L) >> 16) & 0x7fff ); }

user: user-2
content: 引用 1 楼 zhao4zhong1 的回复:srand(time(NULL));//需且仅需在main()函数开头调用一次！  哦,我又运行了下,原来time(NULL)的返回值是相同的...  引用 6 楼 u011374013 的回复:[quote=引用 5 楼 lovenanforever 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] srand(time(NULL));//需且仅需在main()函数开头调用一次！  对srand()不熟,想问下...楼主每次在make_map(void) 不是都生成不同的种子了吗？难道每次生成的随机数种子开头都相同...?  [/quote]是这样的，我这个小程序有三个需要初始化的地方，全部都是用的make_map函数，并且是连续初始化的，所以每次调用time(NULL)获得的数都一模一样，导致三个地方初始化的结果都一样 搞个延时1秒应该也能解决问题。。[/quote]  ....嗯 确实 我在我这试时,延时下生成的就不同了,本身种子也不同了.  放到main()处,每次取得随机数,这三个make_map()就应该不同了.

user: user-2
content: 引用 1 楼 zhao4zhong1 的回复:srand(time(NULL));//需且仅需在main()函数开头调用一次！  我自己试了下,确实是每次都生成的一样的序列,但这又是出于怎么样的原因呢？求解.

user: user-0
content: 引用 5 楼 lovenanforever 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] srand(time(NULL));//需且仅需在main()函数开头调用一次！  对srand()不熟,想问下...楼主每次在make_map(void) 不是都生成不同的种子了吗？难道每次生成的随机数种子开头都相同...?  [/quote]是这样的，我这个小程序有三个需要初始化的地方，全部都是用的make_map函数，并且是连续初始化的，所以每次调用time(NULL)获得的数都一模一样，导致三个地方初始化的结果都一样 搞个延时1秒应该也能解决问题。。

user: user-2
content: 引用 1 楼 zhao4zhong1 的回复:srand(time(NULL));//需且仅需在main()函数开头调用一次！  对srand()不熟,想问下...楼主每次在make_map(void) 不是都生成不同的种子了吗？难道每次生成的随机数种子开头都相同...?

user: user-1

user: user-3
content: 来晚了，只需要调用一次就好！

user: user-4
content: 来晚了，srand在程序开始调用一次就行了

user: user-1
content: srand(time(NULL));//需且仅需在main()函数开头调用一次！