fscanf の書式 "%[^,]" について補足しておきます。
サンプルプログラムに以下のような記述がありました。
/* readfile.c --- 交差点データのファイル入力 */ (途中略) /* 関数fscanfを使って、構造体のデータをファイルから読み出す */ fscanf(fp, "%d,%lf,%lf,%lf,%[^,],%d", &(cross[i].id), &(cross[i].pos.x), &(cross[i].pos.y), &(cross[i].wait), cross[i].name, &(cross[i].points)); for(j=0; j<cross[i].points; j++) { fscanf(fp, ",%d", &(cross[i].next[j])); } c |
最初の fscanf の書式に、%[^,] というものが出てきます。
これは、「 " , "(カンマ) が検出されるまでを1つの文字列として読み込む」
という意味の書式です。
今回扱っているデータは以下のような形式です。
0,0.00,0.00,30,駅前青葉,3,41,38,40
最初から順に、(ID,X座標,Y座標,待ち時間, ... ) と読み進んでいきますが、
例えばここで、
文字列(交差点名=駅前青葉)を読みたくて単に
%s としてしまうと、交差点名には
駅前青葉,3,41,38,40
という具合に、後に読むべき交差数や隣接交差点番号まで全部つながった形のデータが
文字列として読み込まれてしまいます。
(%s は連続する文字列やカンマや数字を、別のものだと認識してくれません)
このようなことが起こらないように、%[^,] という書式を用います。