如何在C中创建随机整数值? 我需要它像硬币翻转一样。 这是我尝试过的:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
#include <time.h>
int main(void)
{
int i;
srand(time(NULL));
for (i=0; i<10; i++)
if ((int)(((float) rand() / ((float) SHRT_MAX)) * 2) > 0)
puts("etz");
else
puts("pali");
return EXIT_SUCCESS;
}
答案 0 :(得分:4)
您的解决方案的问题是(int)(((float) rand() / ((float) SHRT_MAX)) * 2) > 0
始终返回正整数,因此除short
和int
宽度相同的平台外,表达式rand()
始终为真。
另一个问题是,RAND_MAX
会将值从零返回到SHRT_MAX
而不是RAND_MAX == SHRT_MAX
- 在(float)rand() / RAND_MAX > 0.5f
您的解决方案可能因此得到改进:
rand() > RAND_MAX / 2
但是铸造和浮点比较是不必要的,而且过于复杂,因此可以进行测试:
rand() % 2 == 0
可能有人建议您只需测试奇数/偶数:
TIME_TO_SEC
但这在一些执行不佳的算法中存在问题,因为它依赖于单个LSB的随机性 - 它可能在现代库中工作,但最好避免以确保代码可移植性。