• ベストアンサー

C言語_関数_構造体です!教えて下さい!!

<C言語です> 新しく関数を宣言した中で構造体を使用したいのですが, 上手くいきません。 ご指導宜しくお願い致します!! /*data.csv*/ ------------ 鈴木,21 田中,22 佐藤,23 ------------ 以下プログラム ------------ #include <stdio.h> /*構造体の宣言*/ typedef struct list{ char name[80]; int age; }list1; /*関数の宣言*/ void kiroku(FILE *fo,int ki1){ if(ki1==1) fprintf(fo,"%sの歳は%dです。",data[ki1].name,data[ki1].age); else if(ki==2) fprintf(fo,"%sの歳は%dです。",data[ki2].name,data[ki2].age); else fprintf(fo,"%sの歳は%dです。",data[2].name,data[2].age); } int main(){ char *fin="data.csv"; char *fnmo="kiroku.txt"; FILE *fi,*fo; list1 data[10]; int i,k,r; char ss[80]; //open files. fi=fopen(fin,"r"); fo=fopen(fnmo,"w"); //read r=0; while(fscanf(fi,"%[^,],%d",ss,&k)!=EOF){ strcpy(data[r].name,ss); data[r].age=k; r++; } i=1; /*関数の実行*/ kiroku(fo,i); // close files. fclose(fi); fclose(fo); return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

/*関数の実行*/ kiroku(fo,i); 上記コードの部分ですが、 kiroku関数に構造体のデータを渡していませんよ?? list1型のデータ配列であるdataは、 main関数内でしか参照できないので。 解決策としては、 kiroku関数の引数にlist1型を渡せるようにするか、 data自体をグローバルかスタティックで宣言する。 まぁkiroku関数を変更したくないのであれば、 main関数内で宣言している list1 data[10]; を消して、 static list1 data[10]; を 構造体宣言の後に記載してみたら??

mykitune
質問者

お礼

sonata1229 さん ありがとうございました! コンパイルできました!!

その他の回答 (2)

  • precog
  • ベストアンサー率22% (966/4314)
回答No.3

どううまく行かないか書かないと、見る人がコンパイラーなりコンピューターの代わりをしなきゃいけなくなります。

mykitune
質問者

お礼

precog さん ありがとうございました! コンパイルできました!! ご指摘ありがとうございます。 今後質問する際は様子を書くようにします。

回答No.1

kiroku()の中のdata[]ってどこで宣言してるの?

mykitune
質問者

お礼

SilverThaw さん ありがとうございました! コンパイルできました!!

関連するQ&A