C Prog。:结构作为函数的参数?

时间:2009-06-06 15:06:14

标签: c struct

我正在尝试创建结构“出生日期”,以及将为结构赋值的函数,我想知道是否可以这样做:

(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 个答案:

答案 0 :(得分:12)

我认为你得到的是因为dob_st的定义只对main是本地的 - 它不是在这种方法之外定义的。 void input (dob_st *);方法无法知道dob_st是什么,后来称为upis,而不是input,这可能是另一个错误。

答案 1 :(得分:3)

有些事情:你应该在main函数之外和输入函数的原型之前声明你的结构。

你也应该传递一个指向dob_st结构的指针而不是结构本身:现在可能的代码为

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

应该是

dob_st date;
input (&date);

,输出稍后会直接基于日期。

PD:upis功能是否是输入功能?

答案 2 :(得分:0)

您正在将函数名称从“输入”更改为“upis”。

您还需要在main()函数之外定义dob_st。

答案 3 :(得分:0)

p是指针,因此参数应为“input(p)”而不是“inuput(* p)”。使用* p来指示指针,在这种情况下不需要。

答案 4 :(得分:0)

在标准C中,您编写“struct dob_st * p”而不是简单地“dob_st * p”。 还要确保在第一次使用之前声明struct dob_st