お世話になっています。
以下ではtest.csvを1行ずつ読み込み、構造体dataに値を格納する、というプログラムを作成しました。
つい最近までうまく動いていたのですが、何かの拍子で動かなくなってしまいました。
どなたか原因が分かる方、ご教授いただければ幸いです。
C
1#include <stdio.h> 2#include <stdlib.h> 3 4#define N 256 //1行の最大文字数(バイト数) 5int i, j; 6 7//データを格納する構造体の作成 8//構造体はint型のindexと、それに紐づいたdouble型の数値2つで構成されています。 9typedef struct str { 10 int index_num; 11 double f_data[2]; 12} data; 13 14int main() { 15 char fname[] = "test.csv";//1行3列のcsvファイルになります。 16 char line[N]; 17 data data[1]; 18 int f_index; 19 double f1,f2; 20 21 //csvファイルを読み込み、dataへ格納 22 i = 0; 23 FILE *fp; 24 fp = fopen(fname, "r"); 25 //csvファイルを1行ずつ読み込み、読み込んだ内容をf_index, f1, f2へと格納していきます 26 while(fgets(line, N, fp) != NULL) { 27 sscanf(line, "%d,%lf,%lf", &f_index, &f1, &f2); 28 double tmp[] = {f1}; 29 for(j = 0; j < sizeof(data[i].f_data) / sizeof(data[i].f_data[0]); j++) { 30 data[i].index_num = f_index; 31 data[i].f_data[j] = tmp[j]; 32 } 33 i++; 34 } 35 fclose(fp); 36 return 0; 37}
csvファイルの中身 1,1.2,1.4
エラーの状況
gdbでどこでエラーが起こっているかを調べました。
while文において、fgets関数までは正しく動いており、lineに「1,1.2,1.4」が読み込まれていました。
sscanf関数を使ったところ、f_index, f1, f2には「1,1.2,1.4」が読み込まれるのではなく、初期状態の「0,0,0」のままでした。
sscanf関数はなぜ機能しなかったのでしょうか?何かミスがあるのでしょうか?
どなたかご教授ください。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー