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()的其他用户。