アプリ版:「スタンプのみでお礼する」機能のリリースについて

1、読み込むデータ数を取得

2、データ数分だけ、構造体のメモリ領域をmallocし、それぞれの先頭アドレスを構造体のポインタ配列で定義したポインタ配列に確保
3、1で指定されたファイルを開き、2で確保した構造体にデータを格納
というプログラムを作りたいのですが、あってますでしょうか?実行結果の3行目の方法が心配です。

実行結果としては、データ数を入力してください:4
入力ファイル名を指定してください:gifts.dat
出力ファイル名を指定してください:gifts2.dat
表示形式変換後ファイルに出力しました。


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NUMBER (1000)

typedef struct{
char code[NUMBER];
char name[NUMBER];
int price;
}gift;

int main(void)
{
FILE *fp;
FILE *fq;
char a[NUMBER];
int num,i;

gift*item[NUMBER];
printf("データ数を入力してください:");
scanf("%d",&num);
printf("ファイル名を指定してください:");
scanf("%s",a);

if((fp=fopen(a,"r"))==NULL)
{
printf("ファイルが見つかりません./n");
}
else
{
for(i=0;i<num;i++){
if((item[i]=(gift*)malloc(sizeof(gift)))==NULL)
printf("メモリ確保に失敗しました\n");
else{
fscanf(fp,"%s %s %d",item[i]->code,item[i]->name,&item[i]->price);
}
}
}
if((fq=fopen("gifts2.dat","w"))==NULL)
{
printf("ファイルが見つかりません\n");
}
else{

for(i=0;i<num;i++){
fprintf(fq,"code: %s\n name:%s\n price: %d\n",item[i]->code,item[i]->name,item[i]->price);
free(item[i]);
}
}

printf("表示形式変換後ファイルに出力しました。\n");
fclose(fp);
fclose(fq);

return 0;
}

A 回答 (2件)

http://oshiete.goo.ne.jp/qa/9468538.html
おなじ課題やっている方がいますよ。


>実行結果の3行目の方法が心配です。

そもそも2行目も実行結果例と違いますよね?
×ファイル名を指定してください:
○入力ファイル名を指定してください:


現状では読み込んだデータでなにやらやっているワケでもないので、1レコード読み込んで1レコード書き出す。
でも問題はないような気がしますが。

入力ファイル内のデータが1000レコードを越えていたり、最初の「データ数を入力してください:」で入力ファイルにあるデータより多い数を入力したり…の場合が問題起こしそうですけど。
    • good
    • 0

http://oshiete.goo.ne.jp/qa/4372095.html
2008年くらいから出されている課題…みたいですねぇ……。
どこの大学(?)なんだろう?
    • good
    • 0

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