2012-06-22 4 views
-3

Это моя функция:C++ Генератор случайных чисел не генерирует номера корректно на всех

Random(int min, int max) 
{ 
    srand(time(NULL)); 
    return (rand() % (max-min)) + 1; 
    // or 
    return (rand() % (max+min)) + 1; 
    // or 
    return (rand() % (max-min)) 
    // or 
    return (rand() % (max+min)) 
}; 

И это не работает, если я говорю добавить Random (5, 10) иногда обнаруживаются 15, 5 4. Я не могу понять это, потому что все гиды говорят: «Так оно и должно быть», но это не работает. Что я пропустил?

Этот метод является частью класса.

Я попытался srand (время (NULL)) помещается в:

  1. Не совсем
  2. В конструкторе
  3. В методе

Нет результатов.

Не должно rand() вернуть значение от 0 до 1? Мой нет.

+1

Вы должны «выяснить» как функции работают, читая документацию и * мышление * о коде вы пишете, вместо того, чтобы пытаться каждую перестановку соответствующих маркеров в вашем коде. –

+0

Связанный, пожалуйста, прочитайте. http://stackoverflow.com/a/686373/241536 –

ответ

7
  1. Вызов srand только один раз
  2. Использование return (rand() % (max-min+1)) + min; (+1 для включения max в диапазон)
  3. rand() возвращает значение от 0 до RAND_MAX и является положительным целым числом.
+1

@Deukalion: Вы можете узнать все это и многое другое из тонкой документации, например. [справочная страница 'rand'] (http://linux.die.net/man/3/rand) в разделе 3. – thiton

+0

Спасибо. Я пробовал каждый пример, и он не работал вообще. Я использую эти функции так навсегда, никогда не пробовал разбираться, но я понимаю принцип. И я просто забыл о минимуме. Извините, об этом беспорядке: P – Deukalion

3

человек рандов (3)

функция подписи int rand(void); Так что уже не может возвращать значение в диапазоне от 0 до 1, так как ее интеграл.

Возвращаемые значения: Ранд() и rand_r() возвращают значение от 0 до RAND_MAX (включительно). Функция srand() не возвращает значение.

из man rand(3)

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

  • Нет связанных вопросов^_^