c - C 问题中的新手随机数生成器?

标签 c random

#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”

我该如何解决?谢谢!

最佳答案

Don't use srand(clock()) use srand((unsigned)time(NULL)) instead .

更好的种子:

  • 使用 time(NULL) 获取一天中的时间并将结果转换为种子 srand()。

  • time(NULL) 返回自午夜以来经过的秒数 1970 年 1 月 1 日。

  • 使用 rdtsc() 获取 CPU 时间戳并将结果转换为种子 斯兰德()。 rdtsc() 不太可能返回重复值,因为它返回 指令数
    自启动以来由处理器执行。

您还应该在 US-CERT Secure Coding on how properly seed 阅读这篇文章.

关于c - C 问题中的新手随机数生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6864308/

相关文章:

c - 当所需的总量未知时,给定时间 malloc 的最佳数量是多少?

python - python中的random.choice([x, y, z]),为什么种子没有改变?

php - 在 PHP 中获取随机 boolean 值 true/false

c - valgrind memcheck 分配字符串内存时出错

c - 确定我的应用程序的顺序的最佳方法?

c - 在linux中使用open()时如何检测文件被禁止

c++ - C/C++ 编译器如何在头文件中找到原型(prototype)的定义?

random - Python-属性错误: 'int' object has no attribute 'randint'

jquery - 简单的 jQuery 和 CSS 导航在刷新时随机无法正常工作...所有浏览器

sql - 如何在 SQL 中请求随机行?