运行时随机生成器,而不是编译时间

时间:2011-09-06 15:55:31

标签: objective-c random

  

可能重复:
  iPhone: random() function gives me the same random number everytime

我正在为一个我正在研究的大型项目编写一个测试iPhone应用程序,它将涉及随机字符串,数字等。当我使用rand()random()函数时,每次我得到随机数和字符串,但顺序相同!我知道编译器在编译时确定顺序,但不希望这样。我希望它是完全随机的,所以每次不同的东西不仅仅是预定的列表。我尝试过的是一个循环,它可以向上和向下计数以尝试从中获取值,但它不起作用。

3 个答案:

答案 0 :(得分:3)

编译器不生成随机字符串;它们是在运行时生成的。但它们是基于初始种子生成的;对于给定的种子值,您将获得相同的数字序列。您需要在运行时根据系统时间,正常运行时间,用户点击次数等选择种子。

答案 1 :(得分:1)

您需要为rand播种数字。这样每次都是随机的!

这是我的意思的一个例子:

// Seed number for rand() 
srand((unsigned int) time(0) + getpid());

在使用rand()

之前添加上面的代码行

答案 2 :(得分:1)

随机数生成器永远不会真正“随机”,而是根据应始终不同的内容生成数字。为随机数生成器提供一个唯一值,以便它可以生成随机数,这被称为“播种”。对于rand(),您需要使用srand(time(NULL))对其进行播种。对于random(),与srandom()的处理方式相同。有一些适用于iOS的功能,例如arc4random(),它是自播种的。例如,要生成最多(但不包括)10的随机数,您可以使用arc4random(),如下所示:

int random = arc4random() % 10;