проблема с генерацией ранда между 0 и 1 с использованием языка Си - PullRequest
1 голос
/ 04 сентября 2010

Я пытаюсь сгенерировать некоторые числа с помощью функции rand (), как показано ниже:

int main()
{
    int i=0
    for(i=0;i<20;i++)
    {
    printf("%f\n",rand_md());
    }
    return 0;
}



float rand_md()
{
    return (float)rand()/(RAND_MAX+1.0);
}

Но когда я запускаю gcc rand.c, я получаю сообщение об ошибке, как показано ниже: rand.c: In function'main': rand.c: 21: предупреждение: формат '% f' ожидает тип 'double', но аргумент 2 имеет тип 'int' rand.c: на верхнем уровне: rand.c: 36: ошибка: конфликтующие типы для'rand_md' rand.c: 21: ошибка: предыдущее неявное объявление 'rand_md' было здесь

Что не так с моим кодом?

С наилучшими пожеланиями,

Ответы [ 3 ]

6 голосов
/ 04 сентября 2010

Когда вы используете функцию, не объявив ее сначала, C будет считать, что она возвращает int. Чтобы это исправить, вы должны объявить сигнатуру метода для rand_md, прежде чем вызывать ее в main().

Добавьте что-то вроде этого перед main или в заголовочном файле:

float rand_md();
1 голос
/ 04 сентября 2010
double rand_md()
{
    return (double )rand()/(RAND_MAX+1.0);
}

Теперь rand_md возвращает double вместо float.

Кроме того, поскольку вы не включили его в свой пост, вы должны добавить прототип функции до того, какmain().Вы также забыли добавить точку с запятой в int i = 0.Исправленный код выглядит так:

double rand_md();    

int main()
{
    int i=0;
    for(i=0;i<20;i++)
    {
    printf("%f\n",rand_md());
    }
    return 0;
}

double rand_md()
{
    return (double )rand()/(RAND_MAX+1.0);
}
0 голосов
/ 04 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...