• 締切済み

c言語 

データを構造体の配列に格納したいのですが、このやり方ではできませんでした。どうすればいいですか? (ファイル内のデータを読み込んで格納しようとしています。) typedef struct dataset{ int price; char id; char name; }data; int main(void) { FILE *f = fopen("input.txt","r"); FILE *output = fopen("output.txt","w"); char order[100]; char name[100]; char id[100]; int price; int num = 0; while(fscanf(f,"%s",order) != EOF){ fscanf(f,"%s%s%d",product->name[num],product->id,&product[num].price); num++; } } return 0; } input.txt CD Kenji 300 DVD Nanako 350 PC Koki 1000 ........

みんなの回答

回答No.3

productは書き忘れました。 data product[100]; なら、これは、 fscanf(f,"%s%s%d",product->name[num],product->id,&product[num].price); num++; ちがうでしょ~ productはポインタ型じゃなく 構造体配列なので、 product[num].~~~~ なのでは? さらに、 char name; 任意の1文字ですが、 読み込み時%sなので、文字列になっており、 1発でメモリ破壊しますね。 そこらへん、注意を~ 以下は治した方がいいポイントとして。 ポインタ型にしたいなら、 data product[100]; data *p=product; または&product[0];でしょうが、 その前に、dataが小文字なので、 先頭のみ大文字にするか、全部大文字の方が良いかと C言語での、セオリーみたいなものです。 さらに言えば、dataみたいな、よく使う文字は避けて、 「何なのか?」を書いた方がいいでしょう。 そもそも、全部がdataなので! ひとまず、全体的にめちゃくちゃになっており、 整理できていないのだろうなとは、感じているので、 まずは、そちらからいじってみるといいでしょうね。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

で、状況はどんな感じなんですか? どういう風にできないのか、具体的な返答がない状態では、 ここを見ている人たちも具体的な回答はできないと思います。 fopenしたとき、NULL値が返ってきていないか確認しなければなりません。 つまり、入出力ファイルを正しくオープンできていない状態だとすると、 それ以降の処理は全く無意味になるからです。 > while(fscanf(f,"%s",order) != EOF){ > >fscanf(f,"%s%s%d",product->name[num],product->id,&product[num].price); ここ、fscanfの連発で本当にオッケーですか? ファイルから読んだorder[]を構造体のメンバーにばらすのであれば、 後のfscanfはsscanfか何かでないとマズいのでは?

idontlikeclang
質問者

補足

連発でオッケーだよ💌

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>このやり方ではできませんでした。 どういう風にできなかったのか、具体的に示していただきたいです。 コンパイルエラー?(であればエラーメッセージを一字一句正確に) ビルドはできたが実行ができない(どういう風にできない?) 実行はできたが出力ファイルの中身が想定と違っている >fscanf(f,"%s%s%d",product->name[num],product->id,&product[num].price); productって、どこで定義していますか?提示されたコードには ちょっと見当たらないみたいなんですけど。

idontlikeclang
質問者

補足

とりあえず他の解決方法があれば教えてください。 productは書き忘れました。 data product[100];

関連するQ&A

専門家に質問してみよう