2014-02-09 5 views
0

Я использовал эту функцию дважды, и она отображает вышеупомянутую ошибку. Может кто-нибудь объяснить, почему компилятор делает это?Слишком много аргументов для функции 'rand'?

void printrandom() 
{ 
    int x = (rand(5)+1); 
    int y = (rand(5)+1); 
    printf("%d and %d - a total of %d", x, y, (x+y)); 
} 
+4

'rand' не принимают аргументов. –

+0

Правда правда. Я так глуп. – user3238099

+1

Истинные слова ..... –

ответ

2

Это на самом деле rand(void), поэтому вы получаете эту ошибку.

Попробуйте int x = (rand() % 5) + 1;

EDIT, как Даниил указывает, используя % будет на самом деле влияет на вероятность. См. his link, как решить эту проблему.

+0

-1. Использование 'rand()% N' является ошибочным и его следует избегать. См. [Этот вопрос] (http://stackoverflow.com/questions/10984974/why-do-people-say-there-is-modulo-bias-when-using-a-random-number-generator), чтобы выяснить, почему , –

+0

спасибо, имеет смысл – user3238099

+0

@ DanielKamilKozar; Хорошая ссылка. Спасибо :) – haccks

-1

Декларация о rand() функции

int rand(void); 

Это означает, что она не принимает никаких аргументов. Удалить 5 от rand. Если вы хотите, чтобы генерировать случайные числа от 1 до 5, то вы можете сделать это, как

int x = rand()%5 + 1; 
+1

Действительно, это еще один вариант. Но он будет выполнять в среднем 400 миллионов итераций для генерации диапазона в диапазоне ... –

+0

@OliCharlesworth; Правда. Но что не так с ответом. Я упомянул оба подхода. – haccks

+0

Потому что вы представили действительно плохое решение;) –

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