dポイントプレゼントキャンペーン実施中!

下のプログラムは、ファイルに書いてある、姓と名のデータを
構造体にもたせ、それぞれ出力させるというものです。
これの応用として、関数を使って構造体にデータをもたせる
プログラムに改良したいのですが、よくわかりません。
根本的なものはあまり変わらないと思っているのですが、
どなたか、詳しくアドバイスお願いします。


#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++;
}
}

A 回答 (2件)

fgets()は…指定されたサイズか、改行までを渡されたアドレスに読み込む。


というものでは?

構造体のメンバ変数には改行コードが入っているのですか?
読み込もうとしているファイルにはどのようにデータが入っているのですか?

構造体の場合、メンバ変数1つずつ処理するのが定石かと思いますが。
バイナリファイルで処理するのであれば、sizeof()で構造体の中身を丸ごと読み書きでもいいかもしれませんが。
# ただし、ポインタを含んでいないことと、合計サイズが「定義したメンバ変数の合計」にはならない場合がありますが。
    • good
    • 0

ファイルから構造体にデータを格納する部分を


関数にしたいだけなんでしょうか?

int readProfile(PROFILE list[], size_t listLength, FILE* stream);

として、while ループでまわしている部分を切り出せばよいのでは?
エラーをどうするかは要件次第ということで。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!