2013-03-02 4 views
1

Каждый раз, когда я запускаю этот код, он возвращает это значение: 1804289383 Если я перемещаю тело random() внутри main(), он работает просто отлично.Почему этот случайный генератор не работает?

#include <iostream> 
#include <ctime> 
#include <cstdlib> 
using namespace std; 

int random(int); 

int main() 
{ 

    cout << random(); 
    cin.get(); 
    return 0; 
} 

int random(int) 
{ 
    unsigned seed = time(0); 
    srand(seed);    

    int randomNum = rand()%4 + 1; 
    return randomNum; 
} 
+4

Прежде всего: 'int random (int);' несовместим с вашим вызовом функции 'random()', и ваша реализация не реализует параметр. – antonijn

+2

Включите предупреждения компилятора, и вы увидите проблему. –

+2

[http://xkcd.com/221/](http://xkcd.com/221/). –

ответ

2

Проблема заключается в том, что random() ожидает аргумент, и вы не питая аргумент.

Если вы называете это так:

cout << random(0); 

он будет работать.

Лучшим подходом, однако, было бы исключение аргумента, поскольку оно не используется.

И последнее, но не менее важное: вы должны только позвонить srand() один раз, при запуске программы.

+1

Разве вы не ожидали бы ошибки компиляции, а не ошибки сборки? Как это объясняет странный вывод? – antonijn

+0

, но если я избавлюсь от аргумента, он отметит ошибку компиляции: «new declaration» int random() «неявно объявляет старую декларацию» long int random() »« –

+0

Вам нужно исправить свой прототип, а также вашу реализацию. – drescherjm

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