2012-02-23 32 views
8

可能重複:
What's the Right Way to use the rand() Function in C++?蘭特()在編譯時產生相同數量的

我一直在學習如何使用rand()函數和我寫了一個小的猜謎遊戲C++所看到波紋管,但問題是,無論多少次,我編譯程序生成的數是相同的 - > 41

#include <iostream> 
#include <cstdlib> 
#include <conio.h> 
using namespace std; 

int main() 
{ 
    int x = rand()%100; 
    int y=0; 
    cout << "Ghiceste numarul!" << endl; 
    cin >> y; 

    while(y != x) { 

     if(y > x) { 
      cout << "Numarul tau este prea mare! Incearca un numar mai mic!" << endl; 
      cin >> y; 
      } 

      if(y < x) { 
       cout << "Numarul tau este prea mic!" << endl; 
       cin >> y; 
       } 

     if (y == x) { 
     cout << "FELICITARI, AI GHICIT NUMARUL!\n"; 
     return 0; 
     } 
    } 
} 

我也嘗試改變rand()的最大值,只要我把它放到< 41.

任何想法?至於爲什麼會發生這種情況,我沒有線索。我使用的代碼塊IDE,我試圖重建(CTRL + F11)

+1

+1 [SSCCE(http://sscce.org/)。 – 2012-02-23 22:15:40

回答

11

嘗試的main開頭添加

srand(time(0)); 

+7

這樣做,但請注意,只需在程序開始時執行一次即可。不要每次調用rand()時都這麼做。 – spencercw 2012-02-23 21:23:32

+5

並注意警告:如果你每秒運行你的程序超過一次,它將重新使用隨機種子(並且每次運行程序時都會給出相同的數字,直到第二次通過)。 – 2012-02-23 21:24:36

+0

這兩點都不錯。請務必查看您的問題中提到的在tenfour評論中引用的SO帖子。 – 2012-02-23 21:29:06

2

它可能使用相同的種子每次隨機數發生器。如果set the seed of the random number generator每次不同的值,你會得到不同的數字。根據該文檔:

爲了產生隨機樣號碼,函數srand通常初始化 一些獨特的價值,如那些具有執行時間有關。 例如,由函數時間( 頭部聲明)的返回值是不同的,每個第二,這是最需要randoming足夠 鮮明。

0

您需要將種子傳遞給rand()函數,每次程序運行時它都會有所不同(例如timestamp)。一般來說,生成真正的隨機數是不可能的,但你可以得到一個僞隨機數。

5

你應該首先嚐試初始化種子的rand()函數如下:

srand (time(NULL)) 

main開始。確保包括在標題中time.h中

#include <time.h> 

#include <ctime> 
0

你需要用srand()在main開始,通常使用時間)rand函數(;功能

0

隨機數發生器被接種在你的程序的每個運行相同的默認狀態。

爲了獲得每次運行不同的結果,你需要通過調用srand()和傳遞新的種子播種在你的程序中的隨機數發生器。通常使用time(NULL)的返回值作爲種子,因爲這將保證您在不同的遊程中獲得不同的種子。

所以添加以下爲main開頭:

srand(time(NULL)); 
相關問題