#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, const char *argv[]) {
srand(clock());
int num = rand() % 6 + 1;
printf("%i", num);
return 0;
}
我在“srand(clock())中收到此警告;”线。
警告:隐式转换失去整数精度:'clock_t'(又名'unsigned long')到'unsigned int'
我该如何解决?谢谢!
答案 0 :(得分:8)
Don't use srand(clock()) use srand((unsigned)time(NULL)) instead
更好的种子:
使用time(NULL)获取一天中的时间并将结果转换为种子 srand()函数。
time(NULL)返回自午夜起经过的秒数 1970年1月1日。
使用rdtsc()获取CPU时间戳并将结果转换为种子
srand()函数。
rdtsc()不太可能返回重复值,因为它返回
指示数量
自启动以来由处理器执行。
您还应该阅读US-CERT Secure Coding on how properly seed上的这篇文章。
答案 1 :(得分:2)
虽然这不是您确切问题的答案,但它与您的计划非常相关 -
我在Stanford CS106 Course Reader available in PDF中读到int num = rand() % 6 + 1;
不是获取1到6之间随机数的正确方法。
我引用课程阅读器:
这里的问题是
rand()
仅保证它产生的值在0到RAND_MAX的范围内均匀分布。但是,不能保证六分之一的剩余部分将是随机的。
他们还解释了如何正确地执行此操作,这涉及四个不同的步骤(规范化 - 缩放 - 翻译 - 转换)。
我想,既然你试图绕过随机数发生器,你可能想知道这一点。
快乐的编码!
答案 2 :(得分:1)
您也可以使用:
srand(time(NULL));
将消除可能的(高度极不可能)重复。
答案 3 :(得分:-1)
你可以明确地施展它:
srand((unsigned int)clock());