相关疑难解决方法(0)

srand() - 为什么只调用一次?

这个问题是关于这个问题的评论 推荐的方法来初始化srand?第一条评论说srand()应该只在应用程序中调用ONCE.为什么会这样?

c random srand

71
推荐指数
4
解决办法
7万
查看次数

如何不止一次地调用srand会影响随机性的质量?

这条评论指出:

srand(time(0));我会把这一行作为main()中的第一行,而不是多次调用它(这实际上会导致更少的随机数).

......我已经加粗了我遇到问题的界限......重复一个常见的建议,srand在一个程序中调用一次.像srand()这样的问题- 为什么只调用一次?重新迭代,因为time(0)以秒为单位返回当前时间,srand在同一秒内多次调用将产生相同的种子.常见的解决方法是使用毫秒或纳秒.

但是,我不明白为什么这意味着srand应该或只能调用一次,或者它如何导致更少的随机数.

cppreference:

一般来说,伪随机数生成器只应在对rand()的任何调用和程序的开始之前播种一次. 每次您希望生成一批新的伪随机数时,不应重复播种或重新播种.

phoxissrand()的回答- 为什么只召唤一次?:

使用种子值初始化初始状态将生成足够的随机数,因为您没有使用srand设置内部状态, 因此使得数字更可能是随机的.

也许他们只是使用不精确的语言,没有一个解释似乎解释为什么srand多次调用是坏的(除了产生相同的随机数序列)或它如何影响数字的"随机性".有人可以为我清楚这一点吗?

c++ random srand

6
推荐指数
2
解决办法
2995
查看次数

C中是/否循环

我只是不明白为什么这个Yes/No循环不起作用.有什么建议?鉴于输入是"Y".我只想让它运行循环,然后再次询问Y或N. 如果是Y,则打印成功,如果是N,则打印出良好的再见声明.什么原因?

int main(){
    char answer;
    printf("\nWould you like to play? Enter Y or N: \n", answer);
    scanf("%c", &answer);
    printf("\n answer is %c");
    while (answer == 'Y'){
        printf("Success!");

        printf("\nDo you want to play again? Y or N: \n");
        scanf("%c", &answer);
    }
    printf("GoodBye!");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c scanf while-loop

1
推荐指数
1
解决办法
4万
查看次数

标签 统计

c ×2

random ×2

srand ×2

c++ ×1

scanf ×1

while-loop ×1