Как использовать srand и rand для непрерывной генерации новых чисел?

В моей основной функции приведенный ниже фрагмент функции зациклен, чтобы продолжать генерировать два числа от 0 до 4. В первый раз, когда он проходит через цикл, он работает нормально, но во второй раз он сбрасывает ядро. Я не уверен, что это из-за ошибки где-то еще, или я просто неправильно использовал rand и srand. Очень новичок в языке c здесь.

void generate_player2_move(char board[][SIZE], int row, int col) {
    //segmentation fault (core dumped) somewhere around here.
    int randrow, randcol;
    srand((unsigned) randrow);
    srand((unsigned) randcol);  

    row = rand() % 4;
    col = rand() % 4;
}

person user9537202    schedule 23.03.2018    source источник
comment
Возможный дубликат srand() — зачем вызывать его только один раз?   -  person Gilles 'SO- stop being evil'    schedule 23.03.2018
comment
@Жиль О, хорошо! Спасибо!   -  person user9537202    schedule 23.03.2018


Ответы (1)


Код, который вы показали, не делает ничего, что могло бы вызвать дамп ядра, так что, вероятно, это код, который вы не показали. Однако вы используете srand неправильно.

Случайные числа, возвращаемые функцией rand, на самом деле представляют собой последовательность чисел, которые передаются через функцию, при этом последний вывод является новым вводом. Эта функция должна быть заполнена до того, как она запустится в первый раз, и это то, что делает функция srand.

Вы должны вызывать srand только один раз в начале вашей программы. После этого просто звоните rand всякий раз, когда вам нужен новый случайный номер.

person dbush    schedule 23.03.2018
comment
Попался! Благодарю вас! - person user9537202; 23.03.2018