質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

1317閲覧

(アロー演算子による?)エラーの原因がわかりません

urazome

総合スコア26

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/05/05 08:48

標準入力からファイル名を入力して、そのファイルのデータを読み込み、ポインタ配列にデータを格納します。その後、別のファイルに先ほど格納したデータを書き込み、出力できれば成功です。
次の4行が読み込むデータです。
JZK-30 Jizake_tsumeawase 4500
BSP-15 Body_soap_set 3000
BT-200 Bath_towel_set 2500
TEA-20 Koutya_tsumeawase 5000

そして以下のコードを作成したのですが、42行目以降のアロー演算子を使用した行に
"expected identifier before '(' token"のエラーが表示されます。しかし、何が足りないのかわかりません。。。ご教授頂けると助かります!

c言語

1#include<stdio.h> 2#include <stdlib.h> 3#include<string.h> 4#define MAX 4 5 6typedef struct{ 7 char *code[MAX]; 8 char *name[MAX]; 9 int *price[MAX]; 10}gift; 11 12int main(void) 13{ 14 int num,i,len; 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 gift gifts; 23 24 25 printf("ファイル名を指定して下さい:"); 26 scanf("%s",ref); 27 28 for(i=0;i<MAX;i++){ 29 30 fp=fopen(ref,"r"); 31 if(fp==NULL){ 32 printf("%s ファイルが開けません\n",ref); 33 exit(1); 34 } 35 36//一時的に格納します 37 fscanf(fp,"%s %s %d",fcode[i],fname[i],fprice[i]); 38 39//次に動的にそれぞれのメモリを確保します 40 gifts->(code+i)=(*char)malloc(sizeof(char)*strlen(fcode[i]));//(ココから42行目です)error発生 41 //以降のアロー演算子を使用した所でエラーが起こっています 42 gifts->(name+i)=(*char)malloc(sizeof(char)*strlen(fname[i]));//error発生 43 gifts->(price+i)=(*int)malloc(sizeof(int)*strlen(fprice[i]));//error発生 44 45//コピーします 46 srcpy(gifts->(code+i),fcode[i]); //error発生 47 srcpy(gifts->(name+i),fname[i]); //error発生 48 srcpy(gifts->(price+i),fprice[i]); //error発生 49 50//書き込みます 51 file=fopen("present.txt","w"); 52 fprintf(file,"%s\n%s\n%d\n",gifts->(code+i),gifts->(name+i),gifts->(price+i)); //error発生 53 54 free(gifts->(code+i)); //error発生 55 free(gifts->(name+i)); //error発生 56 free(gifts->(price+i)); //error発生 57 } 58 59 puts("表示形式変換後ファイルに出力しました。"); 60 61 fclose(file); 62 fclose(fp); 63 64 return 0; 65} 66

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/05/05 09:37

欲しい結果とコードがちぐはぐですが, どちらかの課題ですか? gift 構造体は変更してはいけないでしょうか. malloc や配列は使わないといけないでしょうか.
urazome

2019/05/05 14:11

すみません、もう一度修正して出直してきます!
guest

回答1

0

ベストアンサー

まず、目についたところで、

gifts->(code+i)=(*char)malloc(sizeof(char)*strlen(fcode[i]));

gifts は、構造体(struct)なんで、-> は無しですね。 単なる (.) かと。
とすると、code+i --> code[i] 辺りでしょうか。
(*char) も初めて見る? (char *) でしょうか。

投稿2019/05/05 09:00

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

urazome

2019/05/05 14:10

すみません、もう一度修正して出直してきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問