快速生成随机数据
在对拍或出题时生成随机数据的种子若为time(0)(需要ctime或time.h头文件),发现1s内生成的数据都是一样的。这是因为time(0)是以1s为单位。为了使1s内生成的数据能有不同,可以适用单位精确到毫秒的有关时间的操作。
注:以下操作的前提是windows环境,需要头文件windows.h。
1、SYSTEMTIME
SYSTEMTIME是一个定义的结构体类型,具体定义代码:
1 typedef struct _SYSTEMTIME { 2 WORD wYear; 3 WORD wMonth; 4 WORD wDayOfWeek; 5 WORD wDay; 6 WORD wHour; 7 WORD wMinute; 8 WORD wSecond; 9 WORD wMilliseconds; 10 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
WORD是一个2字节的无符号整数。更多可看:https://blog.csdn.net/w2453476933/article/details/74090305 c++ 标准数据类型
SYSTEMTIME类型的成员分别意义分别是年、月、周几、天、小时、分钟、秒、毫秒
配合函数:GetSystemTime(&a) (为SYSTEMTIME类型的a赋值世界协调时)或GetLocalTime(&a) (为SYSTEMTIME类型的a赋值本地时间),a.wMilliseconds即可作为随机种子。
2、GetTickCount()
GetTickCount()返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值类型是DWORD(一个占4字节的无符号整数)。可直接作为随机种子(虽然srand()参数类型是unsigned int短了点,但问题不大)。
更详细可见:https://blog.csdn.net/mjshldcsd/article/details/7180962 C++ GetTickCount()和Sleep()