我需要为秒数生成一个随机数,然后用秒数计算这些秒数是多少分钟和几小时。所以,我首先使用 rand() 生成一个数字,但这似乎有点奇怪,每次我运行程序时,随机数(之前的)只增加 3。是的,它是随机的,但每次运行仍然只增加 3 .如果可能的话,我想让它更随机。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
long sekundi;
srand(time(NULL));
sekundi = rand();
double minuti,casovi;
casovi = (sekundi / 3600);
minuti = (sekundi / 60);
printf("%d \n",sekundi);
printf("%4.2f \n",casovi);
printf("%4.2f \n",minuti);
return 0;
}
那是我的代码,我是 C 语言的新手,请原谅我的格式和所有问题。它似乎没有正确计算小时和分钟,它确实对第一个数字正确,然后在没有正确小数的数字后添加 x,00。
最佳答案
我怀疑,当您使用两个在数值上彼此接近的种子初始化生成器时,生成序列中的第一个数字也可能在数值上接近。然而,人们希望在那之后序列会很快发生分歧。
在我的环境中,丢弃第一个数字似乎有帮助:
long sekundi;
srand(time(NULL));
rand(); // <<<<< THIS
sekundi = rand();
当然,如果您在同一秒内运行代码两次,生成器仍将使用完全相同的值作为种子,并且您两次都将获得完全相同的输出。如果这是一个问题,您可能应该使用更高分辨率的计时器来生成种子。
关于您问题的另一方面,您似乎想使用 float 而不是整数除法:
casovi = (sekundi / 3600.);
minuti = (sekundi / 60.);
(注意在数字文字末尾添加的 .
。)
关于c - 如何计算C中的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407966/