有rand()和srand()的问题

时间:2017-08-19 09:42:12

标签: c++ switch-statement path-finding

所以我正在尝试写一个探路者,并且遇到了一些问题。

我目前有一个有四种情况的开关(),想要随机选择其中一种。

do
    {
        if (checkLeft()==false && checkRight()==false && checkUp()==false && checkDown()==false)
        {
            cont = false;
        }

        int x = rand() % 4;
        srand( static_cast<unsigned int>(time(NULL)));
        if (cont == true)
        {
            switch(x)
            {
                case 0:
                    checkRight();
                    break;

                case 1:
                    checkDown();
                    break;

                case 2:
                    checkUp();
                    break;

                case 3:
                    checkLeft();
                    break;
            }

        }

    } while (currentx != max && currenty != max && cont == true);

因为它是一个'do'循环,它似乎并不真的是随机的?我得到了类似的结果。如何确保我从switch()??

获得完全随机的输出

谢谢!

3 个答案:

答案 0 :(得分:1)

time(NULL)不需要具有优于一秒的任何分辨率。除非您的程序运行了很长时间,否则多次调用它可能会多次重复相同的值。这可以解释你的&#34;始终如一的&#34;结果。运行代码&#34;按原样#34;多次,几秒或几分钟,可能会产生不同的结果。但是,如果它快速连续运行几次,它可能会反复给出相同的值,并缓慢地改变值。

一般来说,在第一次调用srand()之前,请在您的计划中拨打rand()一次。

如果您正在使用C ++ 11或更高版本,那么可以使用质量更好的生成器。阅读文档。

答案 1 :(得分:0)

你在rand()之后调用了srand(),它已经使用了种子。 尝试在rand()之前调用srand(),只需要调用一次。所以,在阻止之前调用它。 此外,您可能需要查看(Random C++ Header Reference

答案 2 :(得分:0)

尝试在执行

之前调用srand()