• 締切済み

C言語 構造体、関数 質問です。

下のプログラムは、ファイルに書いてある、姓と名のデータを 構造体にもたせ、それぞれ出力させるというものです。 これの応用として、関数を使って構造体にデータをもたせる プログラムに改良したいのですが、よくわかりません。 根本的なものはあまり変わらないと思っているのですが、 どなたか、詳しくアドバイスお願いします。 #include<stdio.h> #define dFamilySize(32) #define dNameSize(32) #define dPersonSize(1024) #define dBufferSize(64) typedef struct _PROFILE PROFILE; struct _PROFILE { char family[dFamilySize]; char name[dNameSize]; }; main() { int i,j,k; char line[dBufferSize]; PROFILE list[dPersonSize]; for(i=0; i<dPersonSize; i++){ list[i].family[0]='\0'; list[i].name[0]='\0'; } i=0; while(fgets(line,dBufferSize,stdin)!=NULL){ for(j=0; line[j]!=' '; j++){ list[i].family[j]=line[j]; } list[i].family[j]='\0'; for(k=0,j++; line[j]!='\0'; j++,k++){ list[i].name[k]=line[j]; } list[i].name[k]='\0'; printf("%s\n",list[i].family); i++; } }

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

fgets()は…指定されたサイズか、改行までを渡されたアドレスに読み込む。 というものでは? 構造体のメンバ変数には改行コードが入っているのですか? 読み込もうとしているファイルにはどのようにデータが入っているのですか? 構造体の場合、メンバ変数1つずつ処理するのが定石かと思いますが。 バイナリファイルで処理するのであれば、sizeof()で構造体の中身を丸ごと読み書きでもいいかもしれませんが。 # ただし、ポインタを含んでいないことと、合計サイズが「定義したメンバ変数の合計」にはならない場合がありますが。

すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

ファイルから構造体にデータを格納する部分を 関数にしたいだけなんでしょうか? int readProfile(PROFILE list[], size_t listLength, FILE* stream); として、while ループでまわしている部分を切り出せばよいのでは? エラーをどうするかは要件次第ということで。

すると、全ての回答が全文表示されます。

関連するQ&A