標準入力からファイル名を入力して、そのファイルのデータを読み込み、ポインタ配列にデータを格納します。その後、別のファイルに先ほど格納したデータを書き込み、出力できれば成功です。
ファイルのデータはポインタ配列に格納し、且つ、利用する分だけ動的にメモリを確保することが条件です。
次の4行が読み込むデータです。
JZK-30 Jizake_tsumeawase 4500
BSP-15 Body_soap_set 3000
BT-200 Bath_towel_set 2500
TEA-20 Koutya_tsumeawase 5000
そして以下のコードを作成したのですが、
"request for member '(構造体のメンバ)' in something not a structure or union"というエラーが表示されます。
(エラーが起きたところにエラーを書きました。)
しかし、何が足りないのかわかりません。。。ご教授頂けると助かります!
c言語
1#include<stdio.h> 2#include <stdlib.h> 3#include<string.h> 4#define MAX 4 5 6struct gift{ 7 char code; 8 char name; 9 int price; 10}; 11 12int main(void) 13{ 14 int num,i,k; 15 char ref[256]; 16 int fprice[MAX][256]; //一時保管場所 17 char fname[MAX][256], fcode[MAX][256]; //一時保管場所 18 19 FILE *fp; 20 FILE *file; 21 22 printf("データ数を入力してください:"); 23 scanf("%d",&num); 24 printf("ファイル名を指定して下さい:"); 25 scanf("%s",ref); 26 27 28 struct gift *gifts[num]; 29 30 for(i=0;i<MAX;i++){ 31 32 fp=fopen(ref,"r"); 33 if(fp==NULL){ 34 printf("%s ファイルが開けません\n",ref); 35 exit(1); 36 } 37 38 fscanf(fp,"%s %s %d",fcode[i],fname[i],fprice[i]); //一時保管場所に保管 39 40 k=0; 41 while(fprice[i][k]){ 42 k++; 43 } 44 45//ここから動的メモリ確保をします 46 (gifts+i)->code=(char*)malloc(sizeof(char)*strlen(fcode[i])); //エラーrequest ~ 'code' in ~ 47 (gifts+i)->name=(char*)malloc(sizeof(char)*strlen(fname[i])); //エラーrequest ~ 'name' in ~ 48 (gifts+i)->price=(int*)malloc(sizeof(int) * k+1); //エラーrequest ~ 'price' in ~ 49 50//コピー 51 srcpy((gifts+i)->code,fcode[i]); //エラーrequest ~'code' in ~ 52 srcpy((gifts+i)->name,fname[i]); //エラーrequest ~'name' in ~ 53 srcpy((gifts+i)->price,fprice[i]); //エラーrequest ~'price' in ~ 54 55 fclose(fp); 56 57 file=fopen("present.txt","w"); 58 fprintf(file,"%s\n%s\n%d\n",(gifts+i)->code,(gifts+i)->name,(gifts+i)->price); 59 //エラーrequest ~'code' in ~ //エラーrequest ~'name' in ~ //エラーrequest ~'price' in ~ 60 61 fclose(file); 62 63 free((gifts+i)->code); //エラーrequest ~'code' in ~ 64 free((gifts+i)->name); //エラーrequest ~'name' in ~ 65 free((gifts+i)->price); //エラーrequest ~'price' in ~ 66 } 67 68 69 puts("表示形式変換後ファイルに出力しました。"); 70 71 return 0; 72}
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/14 14:17