Top.Mail.Ru
Ответы

Функция Rand в Си

Подскажите пожалуйста почему у меня при запуске кода постоянно пишется 3928, функция rand же должна по моему рандомное выдавать, (Попробовал в нескольких компиляторах)

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

int main() {
short Zagadannoe_chislo;

Zagadannoe_chislo = rand() % 9001 + 999;

printf("%d\n", Zagadannoe_chislo);
}

По дате
По рейтингу
Аватар пользователя
Новичок
6мес

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

#define RAND(min, max) (rand() % ((max) - (min)) + (min))

int main(void) {
int count = 10;
int value = 0;
int left = 1000;
int right = 10000;
srand((unsigned)time(NULL));
while (count != 0) {
value = RAND(left, right);
printf("%d\n", value);
--count;
}
return 0;
}

Код генерирует случайным образом 10 четырёхзначных чисел.

Аватар пользователя
Мыслитель
6мес

Проблема в том, что функция `rand()` в C всегда генерирует одно и то же значение, если вы не инициализируете генератор случайных чисел с помощью функции `srand()`. Без инициализации генератор случайных чисел использует фиксированное начальное значение (seed), которое обычно равно 1. Поэтому результат работы программы будет повторяться при каждом запуске.

Чтобы решить эту проблему, вам нужно использовать функцию `srand()` и задать seed, который меняется при каждом запуске программы. Обычно для этого используют текущую отметку времени (количество секунд с начала эпохи) через функцию `time()` из библиотеки `<time.h>`.

Исправленный код будет выглядеть так:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
short Zagadannoe_chislo;

// Инициализируем генератор случайных чисел текущим временем
srand(time(NULL));

Zagadannoe_chislo = rand() % 9001 + 999;

printf("%d\n", Zagadannoe_chislo);

return 0;
}


### Объяснение:
1. **`srand(time(NULL))`**:
- `time(NULL)` возвращает количество секунд, прошедших с 1 января 1970 года.
- Этот результат используется как начальное значение (seed) для функции `srand()`.
2. После вызова `srand(time(NULL))`, каждый запуск программы будет генерировать разные последовательности случайных чисел.

Теперь при каждом запуске программы вы получите разные значения в диапазоне от `999` до `9999`.

Аватар пользователя
Просветленный
6мес

Функция rand генерирует псевдослучайное число. Каждый ее запуск выводит следующее число по определенной функции. Чтобы она работала корректно, нужно задать начальное значение при помощи функции srand(unsigned int) (один раз в программе). Это называется "посев"
Как правило в учебных примерах используют:
srand(time(nullptr));