2015-10-11 3 views
0

Я хотел набрать несколько «простых» кодовых сообщений с функциями rand и srand, и я попытался запрограммировать симулятор рут Yahtzee. Он случайным образом переворачивает 5 кубиков, и если они совпадают, он печатает, у вас есть Yahtzee и сколько повторных бросков он взял, чтобы получить его. Я набрал это в VM Ubuntu на Windows. Прекрасно работает и получает разумные результаты (от 1 до 4000) ререйлов. Тем не менее, когда я беру один и тот же код в Windows, он ВСЕГДА берет, как 50 milon reerles, чтобы забить Yahtzee. Почему это происходит? Вот код:C Yahtzee simulator берет безумное количество рулонов в Windows, а не в Linux

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main(void){ 
    int dice1, dice2, dice3, dice4, dice5, count=0, e=1; 

    while(e==1){ 
     srand(time(NULL)+rand()); 
     dice1 = rand() % (6) + 1; 

     srand(time(NULL)+rand()); 
     dice2 = rand() % (6) + 1; 

     srand(time(NULL)+rand()); 
     dice3 = rand() % (6) + 1; 

     srand(time(NULL)+rand()); 
     dice4 = rand() % (6) + 1; 

     srand(time(NULL)+rand()); 
     dice5 = rand() % (6) + 1; 

     if(dice1 == dice2 && dice2 == dice3 && dice3 == dice4 && dice4 == dice5){ 
      printf("\tYAHTZEE! of %i's\n\tIt took %i rolls\n", dice1, count); 
      if(count >= 2920) printf("+++LESS THAN A 10%% CHANCE!+++\n"); 
      count = 0; 
      scanf("%i", &e); 
     } else count++; 
    } 

    return 0; 
} 

Я пытался использовать только первый srand, но он продолжает происходить.

+0

Я уже пробовал это, отредактировал бы его сейчас. Он продолжает происходить, он все еще занимает слишком много времени, чтобы получить бросок Яхтзи. Собственно, что случилось с освежением семени? – Eraqus

ответ

0

В течение одной секунды time(NULL) вернет одинаковое количество. Одно и то же семя будет производить одну и ту же последовательность случайных чисел. Позвоните по номеру srand(time(NULL)) как одно из первых утверждений.

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main(void){ 
    int dice1, dice2, dice3, dice4, dice5, count=0, e=1; 

    srand(time(NULL));//call here outside loop so it isn't called again too soon 
    while(e==1){ 
     dice1 = rand() % (6) + 1; 
     dice2 = rand() % (6) + 1; 
     dice3 = rand() % (6) + 1; 
     dice4 = rand() % (6) + 1; 
     dice5 = rand() % (6) + 1; 
     if(dice1 == dice2 && dice2 == dice3 && dice3 == dice4 && dice4 == dice5){ 
      printf("\tYAHTZEE! of %i's\n\tIt took %i rolls\n", dice1, count); 
      if(count >= 2920) printf("+++LESS THAN A 10%% CHANCE!+++\n"); 
      count = 0; 
      scanf("%i", &e); 
     } else count++; 
    } 
    return 0; 
} 
+0

Это работает сейчас, спасибо! Однако почему это работало в Linux с самого начала? – Eraqus