%[^,]ってナニ?

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 は連続する文字列やカンマや数字を、別のものだと認識してくれません)

このようなことが起こらないように、%[^,] という書式を用います。

 
戻る