gpt4 book ai didi

c - 为什么随机生成器只生成零

转载 作者:太空宇宙 更新时间:2023-11-04 06:03:18 25 4
gpt4 key购买 nike

main()
{
int i;
srand((int)time(NULL));
for(i = 0; i < 10; i++)
printf("%f\n", randomInRange(0, 100)); // %f instead of %d
}

int randomInRange(int lo, int hi)
{

double d = (double)rand() / ((double)RAND_MAX + 1);
int k = (int)(d * (hi - lo + 1));
return k+lo;
}

当使用 %d 打印值时,效果很好
但如果我选择 %f 而不是 %d,它只会生成 0
为什么?

最佳答案

n1570.pdf(C 标准)的第 7.21.6.1p9 节说,关于 printf:

... If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.

第 7.21.6.1p8 节说明了 %f 格式说明符的正确类型:

f,F A double argument representing a floating-point number is converted to decimal notation in the style [−]ddd.ddd, where the number of digits after the decimal-point character is equal to the precision specification.

randomInRange 返回一个整数。 int 显然不是 double,因此行为是未定义的。一只鸡可能会跑来跳去,尽管它的头不见了……那只鸡可能会也可能不会导致某人摔倒并摔断脖子。避免 headless 鸡和未定义的行为。

请在以后提问前先查阅手册并尝试自己寻找答案。通过这样做,您将有助于减少互联网上这些信息的冗余。

关于c - 为什么随机生成器只生成零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15290297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com