わからない問題があるのでおしえてください。お願いします
問題:
構造体のポインタ配列を定義し、gift.datをファイルから、構造体を利用する分だけ動的にメモリ確保し、データを読み取ることができるプログラムを作成せよ。読み込んだ結果はファイル出力せよ。また入力ファイル名を標準入力から指定できるようにせよ
実行例:
データ数を入力してください:4
ファイル名を指定してください:gift.dat
フォーマット変換後ファイルに出力しました。
コピーされたファイル:
code: JZK-30
name: Jizake_tsumeawase
price: 4500
code: BSP-15
name: Body_soap_set
price: 3000
code: BT-200
name: Bath_towel_set
price: 2500
code: TEA-20
name: Koutya_tsumeawas
price: 5000
自分が考えて書いたソース:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void ){
int number;
char FileName[FILENAME_MAX];
printf(" データを入力してください:");
scanf("%d",&number);
typedef struct roll{
char code[10];
char name[30];
int price;
}gift;
FILE *fp,*fpout;
gift *p,a;
printf("ファイル名を指定してください:");
scanf("%s",FileName);
p = (gift *)malloc(sizeof(gift)*number);
if( (fp = fopen(FileName, "r") ) == NULL ){
printf("ファイルが見付かりません---%s\n",FileName);
exit( EXIT_FAILURE );
}
int price;
char model[60];
char goods[60];
while( fscanf(fp, "%s %s %d",&model,&goods,&price) !=EOF ){
strcpy( a.code,model);
strcpy( a.name,goods);
a.price = price;
//出力
printf("code: %s\n",a.code);
printf("name: %s\n",a.name);
printf("price: %d\n\n",a.price);
}
int i;
if(( fpout = fopen("copy.txt", "w")) == NULL ){
printf("ファイルが作成できません---copy.txt");
exit( EXIT_FAILURE );
}
// while( scanf(fpout, "%s %s %d",&model,&goods,&price) !=EOF ){
//printf("%d",price);
// printf("%s\t %s\t %d\t\n",model,goods,price);
// };
// printf("code: %s\n",a.code);
// printf("name: %s\n",a.name);
// printf("price: %d\n\n",a.price);
fprintf(fpout ,a.code);
// fprintf(fpout,"\n");
fprintf(fpout, a.name);
fprintf(fpout , "%d",a.price);
// *a++;
//fprintf(fpout,"\n");
//printf("\n");
fclose(fp);
fclose(fpout);
free(p);
printf("フォーマット変換後ファイルに出力しました");
}
gift.datのソース:
JZK-30 Jizake_tsumeawase 4500
BSP-15 Body_soap_set 3000
BT-200 Bath_towel_set 2500
TEA-20 Koutya_tsumeawas 5000