- ベストアンサー
[C言語]2つのファイルを用いたプログラムについて
- C言語で2つのファイルを用いて合計値と平均値を求めるプログラムを作成する方法についての質問です。
- 具体的には、2つのデータファイルを読み込み、「買い物リスト.txt」に書いてある商品価格の合計値と平均値を求めます。
- 商品数が多い場合でも効率的にプログラムを作成する方法を教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
価格表をメモリ上に展開して、買い物リスト一件一件を検索するような 設計にするとシンプルだと思います。 この方針で手抜きプログラムを書くとこんな感じです。 #include <stdio.h> #include <stdlib.h> #include <strings.h> // 商品構造体 typedef struct{ char name[1024]; int cost; } item; // 商品リストを照合し、item_nameに一致する商品の価格を返す int get_cost(item *items, char *item_name){ int i; for(i=0; i<4096; i++){ if(strcmp(items[i].name, item_name) == 0) return items[i].cost; } return 0; } int main(void) { item items[4096]; FILE *fp_items, *fp_list; int sum=0; int i; char item_name[1024]; bzero(items, sizeof(items)); // ファイルオープン fp_items = fopen("価格表.txt", "r"); fp_list = fopen("買い物リスト.txt", "r"); // 価格表を構造体に読み込む for(i=0; fscanf(fp_items, "%s %d\n", items[i].name, &items[i].cost) != EOF; i++); // 買い物リストから合計額を算出 for(i=0; fscanf(fp_list, "%s\n", item_name) != EOF; i++) sum += get_cost(items, item_name); // 表示 printf("total = %d\n", sum); printf("average = %f\n", (float)sum / i); // あとかたづけ fclose(fp_items); fclose(fp_list); } 実際にはこれだけではダメです。 僕が先生だったら30点くらいつけます。 ・エラー処理 ・4096行以上のファイルの対応 ・空行、不正行対応 など、完成度を高めるために工夫してみましょう。 ところで、昨日も同じ質問を見かけましたけど、同じ方でしょうか?
その他の回答 (1)
- SaKaKashi
- ベストアンサー率24% (755/3136)
価格表.txtを一度全部読んで、何行あるか数える。 その行数分の価格表を格納できる領域をmallocする。 価格表を読んでmallocした領域に商品名と価格を格納する。 買い物リスト.txtを読みながら読み込んだ商品名を検索する。 後は合計と平均を求めるだけ。
お礼
みなさんアドバイスありがとうございます。 なんとか解決することができました。 質問はどちらも私が投稿しました。教えてgooとMSNの相談箱に質問を投稿したところ、どちらの質問もそれぞれ2つのサイトに質問がupされると知らなかったので、今回のようなことになりました。今後気をつけます。