• 締切済み

c言語の問題について

飲食店の六月分の帳簿データを book-6.dat がテキストで書かれており、中身を見てみると 20120601 1 meat 125 10000 20120602 1 rice 2000 10 20120603 0 uriage 500 100 20120603 1 beer 140 24 .... となっている。このうち左端から日付、支出/収入、商品名、単価、数量を表している。 ただし、支出は1、収入は0とする。 このファイルを構造体の配列に読み込む関数 void readData(FILE *fp, struct BOOK *book)を完成させたい。(不足部分を補いなさい)。 ただし、book-6.datに書かれてある単価と数量のセットは100セットあることが予め分かっているとする。 #include<stdio.h> #include<stdlib.h> #define FILENAME "book.dat" struct BOOK{ char date[50]; char item[100]; int tanka; int suryou; int ; }; void readData(FILE *fp, struct BOOK *book); int main(){ struct BOOK mybook[100]; int i; FILE *fp; if((fp = open(FILENAME, "r"))==NULL){ fprintf(stderr, "%s cannot be found!\n", FILENAME); exit(1); } readData(fp, mybook); fclose(fp); for(i=0; i<100; i++){ printf("%s : %d x %d\n", mybook[i].item, mybook[i].tanka, mybook[i].suryou); } } void readData(FILE *fp, struct BOOK *book){  //アスキーファイルを読むものとする } よろしくお願いします。

みんなの回答

  • ferien
  • ベストアンサー率64% (697/1085)
回答No.3

#include<stdio.h> #include<stdlib.h> #define FILENAME "book.dat" struct BOOK{ char date[50]; char item[100]; int tanka; int suryou; //int ; }; void readData(FILE *fp, struct BOOK *book); int main(){ struct BOOK mybook[100]; int i; FILE *fp; if((fp = fopen(FILENAME, "r"))==NULL){ fprintf(stderr, "%s cannot be found!\n", FILENAME); exit(1); } readData(fp, mybook); fclose(fp); for(i=0; i<100; i++){ printf("%s : %d x %d\n", mybook[i].item, mybook[i].tanka, mybook[i].suryou); } return 0; } //アスキーファイルを読むものとする void readData(FILE *fp, struct BOOK *book){ while(fscanf(fp, "%s%s%d%d", book->date, book->item, &book->tanka, &book->suryou) != EOF){ book++; } } 問題にちょっとだけミスがあったので直しました。(どこか捜してみて下さい。) book.datは、支出/収入の項目はなくした方がいいです。(自分でやって下さい。) 書き方は他にもあると思いますが、とりあえず目的の動作はしました。

すると、全ての回答が全文表示されます。

関連するQ&A