2015-12-02 3 views
-1
void getRandomWords() 
{ 
int n, i = 0; 
do 
{ 
    srand((int)time(NULL)); 
    n = rand() % 10; 
    for (int j = 0; j < 10; j++) { 
     printf("%c\n", words[n][j]); 
    } 
    i ++; 
}while(i < 4); 
} 

Я написал код выше, чтобы выбрать 4 случайные слова из массива слов следующим образом:Выбор случайного слова из 2d массива слов

char words[10][10] = {"dog", "cat", "horse", "cow", "goat", "monkey", "elephant", "crow", "fish", "snake"}; 

Когда я исполняю ПРОГРЫ то же самое случайное слово отображается 4 раза, однако, когда я запускаю отладчик, все, кажется, работает нормально !!!! (Отображается 4 разных слова). Может кто-нибудь осветить меня тем, что здесь происходит, пожалуйста?

+0

Возможный дубликат [вызов rand(), возвращающий неслучайные результаты] (http://stackoverflow.com/questions/9686271/calling-rand-returning-non-random-results) – usr2564301

ответ

3

Вам необходимо посеять только один раз.

Put эта линия

srand((int)time(NULL)); 

вне цикла.

Функция rand() сконструирована таким образом, что она будет производить такую ​​же последовательность чисел для данного семени. Поскольку вполне вероятно, что внутренний цикл происходит очень быстро, вы видите одну и ту же последовательность чисел.

+0

Черт, спасибо, чувак ... Также мне нужна помощь, чтобы реализовать что-то, чтобы одно и то же слово не могло быть случайно выбрано дважды ... Я попытался установить переменную 'int' для каждого слова в' 1', если она была выбрана случайным образом. Есть ли более осуществимый способ, пожалуйста? Еще раз спасибо! –

+0

@DavidFarrugia сделать массив возможных ответов. Выберите случайный случай из длины массива. Затем скопируйте последний элемент массива в промежуток и уменьшите количество вариантов для следующего случайного выбора. –

+0

@WeatherVane Хмм Я об этом не думал. Спасибо man :) –

Смежные вопросы