Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Функция Rand в Си

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

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

int main() {
short Zagadannoe_chislo;

Zagadannoe_chislo = rand() % 9001 + 999;

printf("%d\n", Zagadannoe_chislo);
}
Лучший ответ
Николай Веселуха Высший разум (378062) 2 месяца назад
#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 четырёхзначных чисел.
Остальные ответы
speexz Мыслитель (7585) 2 месяца назад
Проблема в том, что функция `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`.
speexzМыслитель (7585) 2 месяца назад
блин, ответы сломались, код не показывается
speexzМыслитель (7585) 2 месяца назад
Вставлю сюда:
 #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;
}
speexzМыслитель (7585) 2 месяца назад
всё равно не вставляется
egjar Просветленный (20824) 2 месяца назад
Функция rand генерирует псевдослучайное число. Каждый ее запуск выводит следующее число по определенной функции. Чтобы она работала корректно, нужно задать начальное значение при помощи функции srand(unsigned int) (один раз в программе). Это называется "посев"
Как правило в учебных примерах используют:
srand(time(nullptr));
Похожие вопросы