C言語関連
c言語で、csvファイルを読み込みその内容を構造体に格納するプログラムを作りたいです。csvファイルはカンマ区切りで、都道府県のデータが以下のように記述されています。 csvファイル名:JapanStatisticalData (1).csv 番号 都道府県 人口[千人] 面積[平方km] 1 北海道 5092 83457 2 青森県 1184 9645 3 岩手県 1163 15279 作成したプログラム #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFFER_SIZE 1024 #define MAX_ROWS 100 // 最大行数 // 都道府県データの構造体 typedef struct { int bango; char name[50]; int jinko; int menseki; } ToDoHuKen; int main() { FILE *file = fopen("JapanStatisticalData (1).csv", "r"); if (file == NULL) { perror("ファイルを開けません"); return 1; } char buffer[BUFFER_SIZE]; ToDoHuKen data[MAX_ROWS]; // 構造体配列 int count = 0; // データ行数 // 最初の行を読み飛ばす (ヘッダー行) fgets(buffer, BUFFER_SIZE, file); // 1行ずつ読み込む while (fgets(buffer, BUFFER_SIZE, file)) { if (count >= MAX_ROWS) { printf("データ行が多すぎます。最大 %d 行まで処理可能です。¥n", MAX_ROWS); break; } // 構造体に格納 sscanf(buffer, "%d,%s49[^,],%d,%d,%lf,%d,%lf,%lf,%d,%lf,%d,%d,%d,%lf", &data[count].bango, data[count].name, &data[count].jinko, &data[count].menseki, ); count++; } fclose(file); // 構造体配列の内容を出力 printf("データを出力します:¥n"); for (int i = 0; i < count; i++) { printf("番号: %d, 都道府県名: %s, 人口: %d, 面積: %d¥n", data[i].bango, data[i].name, data[i].jinko, data[i].menseki); } return 0; } このプログラムを実行すると データを出力します: 番号: 1, 都道府県名: 北海道,5092, 人口: 0, 面積: 0 このようになってしまい、データが正しく出力されません。 試しに構造体の中身をすべてchar型にし、 strcpy(data[count].bango, strtok(buffer, ",")); このように文字列をコピーして構造体に格納するとデータがきちんと出力されます。char型で実行してもいいのですが、別のプログラムで同じ構造体を使用して構造体同士での数値の比較をしたいため、int型などが含まれる構造体にデータを格納したいのですがどうすればよいでしょうか。