2015-02-22 4 views
-2

я следующий код:C++ случайное не работает (возвращает то же значение всегда)

#include <cstdlib> 
#include <iostream> 


using namespace std; 

int main() 
{ 
    cout << rand()%30<< endl; 
    return 0; 
} 

я запускаю этот код и всегда получаю 11. Пожалуйста, объясните, почему, если вы знаете. Я использую последние кодовые блоки и C++

+0

Спасибо за ответы Я думал, что случайная работа как в Java:) такая ошибка ... srand (time (0)); cout << rand()% 30 << endl; хорошо работает –

+0

int getRandomNumber() {return 11;} : D –

ответ

1

Функция rand() не генерирует поистине случайное число; он фактически возвращает следующее значение pseudo-random в последовательности значений от 0 до RAND_MAX. Вы можете изменить начальную точку в этой последовательности, используя srand().

Общий метод заключается в initialise srand() using the current time с использованием функции time(), as shown below:

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

int main(int argc, char *argv[]) 
{ 
    srand(time(NULL)); 
    printf("%d", rand()); 
    return 0; 
} 

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

1

Для инициализации генератора случайных чисел вам нужно позвонить srand() с семенем.

Нужно только его инициализировать once.

вы получите ту же последовательность чисел с одной и той же семени, так что обычно люди используют текущее время в качестве семян, как и в значительной степени гарантированно переключаться между программными расстрелов:

srand(time(0)); 
-1

Для того, чтобы использовать генератор случайных чисел, чтобы получить различное количество, заданное в каждый раз, вызывает его, вы должны обязательно использовать с time.h. Включите time.h ниже, чем использовать;

srand(time(NULL)); 

printf("%d", rand()); 
+0

Включить time.h под iostream –

0

rand() это старый генератор случайных чисел, унаследованный от C. C++ имеет лучше RNG доступно. Просто используйте std::default_random_engine, если вы не хотите беспокоиться о деталях.

Также %30 уменьшает случайность. Вы, вероятно, хотите там std::uniform_int_distribution<int>(0,30).

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