C Prog .: Структура как аргумент функции? - PullRequest
2 голосов
/ 06 июня 2009

Я пытаюсь создать структуру «Дата рождения» и функцию, которая будет присваивать значения структуре, и мне интересно, возможно ли сделать это как-то так:

(PS. Я постоянно получаю сообщение об ошибке "Ошибка синтаксиса списка аргументов", для 2-й и 23-й строк.)

#include <stdio.h>
void input (dob_st *);
int main ()
{
    typedef struct
    {
        int year;
        int month;
        int day;
    }
    dob_st;

    dob_st date;
    dob_st *p;
    p=&date;
    input (*p);
    printf("%02i.",p->day);
    printf("%02i.",p->month);
    printf("%i.",p->year);

    return 0;
}
void upis (dob_st *p)
{
    printf ("Date of birth:\nDay?\n");
    scanf ("%i",&(p->day));
    printf ("Month?\n");
    scanf ("%i",&(p->month));
    printf ("Year?\n");
    scanf ("%i",&(p->year));
}

Ответы [ 5 ]

12 голосов
/ 06 июня 2009

Я думаю, вы получаете это, потому что определение dob_st локально только для main - оно не определено вне этого метода. Метод void input (dob_st *); не может знать, что такое dob_st, и в дальнейшем он называется upis, а не input, что, вероятно, является еще одной ошибкой.

3 голосов
/ 06 июня 2009

Некоторые вещи: Вы должны объявить свою структуру вне основной функции и перед прототипом функции ввода.

Вы также должны перейти к вводу указателя на структуру dob_st, а не на саму структуру: теперь возможный код как

dob_st date;
dob_st *p;
p=&date;
input (*p);

должно быть

dob_st date;
input (&date);

, а выходные данные будут позже основаны на дате напрямую.

PD: должна ли функция upis быть функцией ввода?

0 голосов
/ 07 июня 2009

В стандартном C вы пишете "struct dob_st * p" вместо простого "dob_st * p". Также убедитесь, что вы объявляете struct dob_st до , когда вы впервые используете ее.

0 голосов
/ 06 июня 2009

p - указатель, поэтому аргумент должен быть «input (p)» вместо «inuput (* p)». Использование * p защищает указатель, и в этом нет необходимости.

0 голосов
/ 06 июня 2009

Вы меняете название функции с «input» на «upis».

Вам также нужно определить dob_st вне функции main ().

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