2014-12-30 203 views
0

隨機數我有一個struct稱爲drug,我想爲會員minimal_quantityquantity產生隨機數。但每次運行代碼時,我都會在這兩個成員中得到相同的值,即所有生成的藥物。生成成員結構

我的結構定義是這樣的:

struct drug { 
    int code; 
    char name[25]; 
    int minimal_quantity; 
    int quantity; 
}; 

和產生藥物的方法是這樣的:

load_drugs_file(){ 
    int i; 

    for(i=0;i<=50;i++){ 

     if ((fp=fopen("drugs.dat","a+"))==NULL){ 
      printf("Error: impossible to open the file. \n"); 
      exit(1); 
     } 

    struct drug m; 
    srand(time(NULL)); 
    int r1 = rand() % 500; /* random int between 0 and 499 */ 
    int r2 = rand() % 1000; /* random int between 0 and 999 */ 

    m.code=i; 
    strcpy(m.name,"A"); 
    m.minimal_quantity=r1; 
    m.quantity=r2; 

    fwrite(&m,sizeof(m),1,fp); 

    fclose(fp); 
    } 
} 

有什麼建議?

+2

你可以顯示你得到的輸出嗎?另外,我強烈建議將循環的'fopen'和'fclose' ** ** **。沒有理由繼續打開和關閉文件。 – dg99

+0

爲什麼不是在該函數的名稱之前指定的返回類型? –

+0

你怎麼知道你總是得到相同的兩個「隨機」數字? –

回答

1

移動srand(time(NULL));main()

如果你在很短的時間間隔內調用它,隨機種子總是相同的,這就是爲什麼你得到相同的價值。

如果您在main()函數中調用它,則每次後續調用rand()都會給出不同的值,並且每次運行程序時,種子都會有所不同。

+0

非常感謝! – MrPedru22