csvファイルを構造体へ格納

csvファイルを構造体へ格納 以下に示すプログラムは柴田望洋先生のサンプルです。 (このプログラムは理解できています) A君 155.5 38.5 B君 164.0 60.0 C君 165.1 55.5 D君 172.0 100.0 (名前、身長、体重) という内容のファイルなのですが、 それぞれを空白で区切ってあります。 ここではfscanfを用いて読み込み、構造体へ格納処理をしているのですが、 ファイルがcsv形式(,)で区切られた場合、%[^,]などとしなければなりません。 調べてみるとfgetsとstrtokを用いてするほうが、一般的だと知りました。 カンマで区切られたcsvファイルから格納するのを このプログラムで適用した場合どのようになりますか。 今特に、fgetsの使い方が理解できていないです。 /*構造体に格納*/ #include<stdio.h> #define NUMBER 100 typedef struct{ char name[100]; double height; double weight; } pdata; void swap(pdata *x, pdata *y); void sort(pdata data[], int n); int main(int argc, char *argv[]) { FILE *fp; int i; int ninzu = 0; double hsum = 0; double wsum = 0; pdata data[NUMBER]; if((fp = fopen(argv[1], "r")) == NULL){ printf("ファイルをオープンできません\n"); } else{ while(fscanf(fp, "%s%lf%lf", data[ninzu].name, &data[ninzu].height, &data[ninzu].weight) == 3) { hsum += data[ninzu].height; wsum += data[ninzu].weight; ninzu++; } } sort(data, ninzu); for(i = 0; i < ninzu; i++){ printf("%-10s %5.1f %5.1f\n", data[i].name, data[i].height, data[i].weight); } printf("-----------------------------\n"); printf("平均 %5.1f %5.1f", hsum/ninzu, wsum/ninzu); fclose(fp); return 0; } /*個人データの交換*/ void swap(pdata *x, pdata *y) { pdata temp; temp = *x; *x = *y; *y = temp; } void sort(pdata data[], int n) { int k = n - 1; int i, j; while(k >= 0){ for(i = 1 , j = -1; i <= k; i++){ if(data[i - 1].height > data[i].height){ j = i - 1; swap(&data[i], &data[j]); } } k = j; } }

補足

私が自分で考えたプログラムも掲載しています。 ご指摘おねがいできないでしょうか。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1450183344

C言語関連1,351閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

cgengo_cさん for(i = 0; i < ninzu; i++){ printf("%-10s %5.1lf %5.1lf\n", data[i].name, data[i].height, data[i].weight);// } printf("-----------------------------\n"); printf("平均 %5.1lf %5.1lf", hsum/ninzu, wsum/ninzu);//整数の割り算?? fclose(fp); return 0;