C++ 在VisualC+中,为使srand()工作而提供sleep(1000)时出错+;

C++ 在VisualC+中,为使srand()工作而提供sleep(1000)时出错+;,c++,visual-c++,sleep,visual-c++-2008,visual-c++-2008-express,C++,Visual C++,Sleep,Visual C++ 2008,Visual C++ 2008 Express,我有以下计划: srand((unsigned) time(NULL)); for (int w = 0; w < 10; w++) { int ran_x; ran_x = rand() % 255; cout << "nRandom X = " << ran_x << endl; //some more lines of code Sleep(1000); } srand((无符号)时间(NULL)); 对于

我有以下计划:

srand((unsigned) time(NULL));
for (int w = 0; w < 10; w++) {
    int ran_x;
    ran_x = rand() % 255;
    cout << "nRandom X = " << ran_x << endl;
    //some more lines of code
    Sleep(1000);
}
srand((无符号)时间(NULL));
对于(int w=0;w<10;w++){
int ran_x;
ran_x=rand()%255;

cout在gcc中没有任何问题

#include <iostream>
#include <cstdlib>

int main (int argc, char *argv[])
{    
    srand( time(0) );

    for (int w = 0; w < 10; w++)
    {
        int ran_x = rand() % 255;

        std::cout<<"\nRandom X = " << ran_x << std::endl;

        sleep(1);
    }

    return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{    
srand(时间(0));
对于(int w=0;w<10;w++)
{
int ran_x=rand()%255;

std::cout显然你不应该睡觉。代码在我看来很正常,只要你只调用一次srand()。如果你在一秒内多次调用整个代码块,那么time(NULL)将返回相同的秒值和srand()将以相同的数字开始伪随机数生成,选择相同的10个后续数字集……

在我看来,您的程序在没有睡眠调用的情况下应该可以完美地工作。事实上,在VS2008上,我似乎可以完美地工作。我相信您的问题一定是在代码中,您已经删除了,认为它不相关。

代码您发布的nippet对您的应用程序终止几乎不负任何责任,
Sleep

因为如果我去掉睡眠(1000),它 没有给出任何错误,但它没有 也可以提供随机值

嗯,
rand()
当然会提供伪随机数,尽管PRNG实现可能不会返回沿返回值位均匀分布的随机值,也就是说,在许多实现中,较高的位比较低的位变化更频繁,这就是为什么在选择0到255之间的随机值时,您的代码不是一个好的选择

一般来说,我建议您从标准库的rand/srand切换到boost的mersennetwister()之类的实现,或者至少可以看到

“更多代码行”的内容是什么


我敢打赌,您的代码直接或间接地取决于您先前生成的随机值。此代码可能是一个除法,或涉及设置某些容器的长度,并在生成的随机数为0时停止。

代码看起来不错,但如果您想要一个8位随机数,您的意思可能是
%256
贝尔。你确定你没有硬件问题(标准程序员响应)。或者缺陷在你遗漏的行中……我有windows Vista。这会产生任何问题吗?[帕克斯以绝地的方式挥手]:“这不是你要找的代码。”好的,其余的代码包括位集和与之相关的操作。你认为它们会产生问题吗?你向我们展示的不会给gcc或MSV带来困难-因此,必须由其他一些代码负责。你应该只调用srand一次,例如在应用程序开始时。@bijlikamasla:是的,正如Jim所说,最好的方法是将srand()放在main()中,然后让您的代码随时调用rand()。如果这很困难(例如,您正在编写库),则使用静态变量跟踪是否调用了srand(),尽管您可能会干扰rand()的其他用户。