【发布时间】:2013-06-17 09:42:22
【问题描述】:
如何从 c 中的字符数组中选择一个随机元素?
例如:
char *array[19];
array[0] = "Hi";
array[1] = "Hello";
等
我正在寻找类似 array[rand] 的东西,其中 rand 是 o 和数组长度(在本例中为 20)之间的随机整数,例如 1、2、3、19 等。
【问题讨论】:
-
你在照顾
rand() -
也许
char* array[20]; -
所以,需要明确的是,
20 * rand()是不正确的。使用rand() % 20。但是,如果您的数组有 20 个元素长,则需要修复变量声明!你只在那里分配了 19 个元素。 -
@svk 不,不要使用
%,因为结果可能不一致。将 U(0,1) 值乘以 20 和 floor 将得到一个从 0 到 19 的 int,即 20 个元素都设置为从零开始的数组索引。 -
@pjs 指的是 linux 手册页中的这个问题:“Linux C 库中的 rand() 和 srand() 版本使用与 random(3) 相同的随机数生成器和 srandom(3), 所以低位应该和高位一样随机. 然而, 在旧的 rand() 实现中, 以及在不同系统上的当前实现中, 低位的随机性远低于高阶位。当需要良好的随机性时,请勿在旨在可移植的应用程序中使用此函数。(请改用 random(3)。)"