0

我有以下程序:錯誤,當我給睡眠(1000),使srand()函數的工作,在Visual C++

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); 
} 

我上的Visual C++ 2008,運行它,當我運行這個程序,它不顯示任何錯誤或警告。但是當我運行它時,有些時候它運行良好,有些時候它停在中間,並出現此錯誤「此應用程序已要求運行時以不尋常的方式終止它。 請與應用程序的支持團隊聯繫瞭解更多信息。」

我該怎麼辦?是否有可能使用Sleep()函數執行它,並仍然獲得隨機生成的值。因爲如果我刪除的睡眠(1000),它不提供任何錯誤,但它不給隨機值或者

+1

代碼看起來不錯,但如果你想要一個8位隨機數。你確定你沒有硬件問題(標準程序員響應)。或缺陷是在你省略的行... – trojanfoe 2011-02-08 08:18:06

+0

我有Windows Vista。這是否會產生任何問題? – bijlikamasla 2011-02-08 08:23:06

+1

[Pax用絕地的方式揮手]:「這不是你要找的代碼。「 – paxdiablo 2011-02-08 08:24:25

回答

1

工作沒有任何問題,用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; 
} 
4

顯然,你不應該睡覺了。代碼看起來對我來說很理智,只要你只調用srand()一次。如果您在秒內多次調用整個代碼塊,則time(NULL)將返回相同的第二個值,並且srand()將以相同數量開始生成僞隨機數,選擇相同的一組隨機數數字....

1

對我來說,似乎你的程序應該完美地工作,沒有睡眠呼叫。事實上,VS2008在我看來很適合我。我相信你的問題必須在代碼中,你刪除了它認爲它不相關。

1

您發佈的代碼片段幾乎不會負責您的應用程序終止,Sleep或不。

因爲如果我刪除的睡眠(1000),它 犯規給任何錯誤,但它不 給隨機值無論是。

好,rand()肯定給你的僞隨機數,雖然PRNG實現可能不會返回沿着返回的值,即在許多實現的位均勻分佈的隨機值,較高位往往比改變低位,這就是爲什麼你的代碼是一個糟糕的選擇0到255之間選擇一個隨機值。

一般來說,我建議從標準庫的rand/srand切換到像boost的mersenne twister(boost::random ),或至少看到

http://c-faq.com/lib/randrange.html

0

「更多行代碼」的內容是什麼?

<心理調試>我敢打賭,你有代碼,那裏,直接或間接,取決於你以前生成的隨機值。這段代碼可能是一個部門,或者涉及到設置一些容器的長度,並且當生成的隨機數是0時borks。< /通靈調試>