SanchelliosProg
@SanchelliosProg
Java, Android, Software Testing

Странно работает rand(). В чем проблема?

Привет! Есть у меня функция:

char generate_asterisk_or_space() {
	srand(static_cast<int>(time(0)));
	int num = rand() % 2;
	switch (num) {
	case 0:
		return '_';
	case 1:
		return '*';
	default:
		return '_';
	}
}


Суть её в том, чтобы просто вернуть * или _. С помощью неё я формирую массив, но! Она выдаёт при обычном запуске совершенно одинаковые символы... Упс!

Ещё одно но, заключается в том, что если я дебажу код пошагово, всё работает как и ожидалось - формируется случайный набор символов. Пробовал некоторые штучки с задержкой времени и передачей разных параметров в srand() - не помогло.

В чём же причина такого непонятного поведения?
  • Вопрос задан
  • 281 просмотр
Решения вопроса 1
bogdanov-s
@bogdanov-s
Че-то там программирую
Устанавлювайте seed один раз - перед формированием массива. При релизной сборке значие возвращемое time скорее всего одинаковое. Пример:
srand(static_cast<int>(time(0)));
for( int i =0; i<array_length; i++){
     rand_array[i] = generate_asterisk_or_space();
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
С помощью неё я формирую массив,

Т.е. вызываешь её в цикле, т.е. вызываешь srand(static_cast(time(0))); много раз за короткое время. Продолжать?
Вопрос: зачем ты это делаешь внутри этой функции?
Ответ написан
Комментировать
AxisPod
@AxisPod
А как еще работать, если всегда выставляется одно и то же стартовое значение?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы