2009-06-06 15 views
2

私は構造体に値を代入する関数 "Date of birth"を作成しようとしていますが、これはどういうわけか、このようにすることが可能です:C Prog .:関数の引数としての構造ですか?

(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)); 
} 
+0

タンクが大好き! "upis"について、私はArturの投稿にコメントしました。それは、私がそれをSerbianから翻訳していて、それを忘れたからです。 私は主な機能の外で構造を宣言することはできないと思っていました... :)今はすべてが論理的に見えます... –

答えて

12

私はdob_stの定義は唯一mainにローカルであるため、これを取得していると思います - 。それがこの方法の外に定義されていません。 void input (dob_st *);メソッドはdob_stが何であるかを知る方法がなく、後でと呼ばれ、inputではなく、おそらく別のエラーです。

0

関数の名前を 'input'から 'upis'に変更しています。

また、main()関数の外側にdob_stを定義する必要があります。

0

pはポインタなので、引数は "inuput(* p)"の代わりに "input(p)"にする必要があります。 * pを使用すると、ポインタを参照するので、この場合は必要ありません。

3

いくつかのこと:構造をmain関数の外、および入力関数のプロトタイプの前に宣言する必要があります。

また入力にdob_st構造体へのポインタではなく、構造自体渡すべき:

dob_st date; 
input (&date); 

出力は、後に基づくものであるべきである

dob_st date; 
dob_st *p; 
p=&date; 
input (*p); 
として今や可能コード直接日付。

PD:upis関数は入力関数を意味しますか?

+0

はい、プログラムは、セルビア語で初めてでした。 –

0

標準Cでは、単純に "dob_st * p"ではなく "struct dob_st * p"と記述します。 を初めて使用する前に、struct dob_st を宣言してください。

関連する問題