fgets, sscanf, バッファ、ストリーム について
ファイルからデータを入力するのに、fscanf の代わりに fgets と sscanf を用いようと考えています。
そこで、sscanf に与えるバッファ文字列を、ファイルストリームのように扱う方法は無いものでしょうか。
例えば以下のデータファイルに対して、以下のプログラムをうまく動作させるには、どのようにすればよいでしょうか。
どうぞ、よろしくお願いします。
(データファイル test.dat)
n_data 4
1 3 8 4
(プログラム)
#include <stdio.h>
main()
{
int i, n_data, *data;
char buf[100];
FILE *fp;
fp = fopen ( "test.dat", "r" );
fgets(buf, 100, fp);
sscanf( buf, "n_data %d\n", &n_data );
data = (int *)malloc( n_data * sizeof(int) );
for( i=0; i<n_data; i++ ){
fgets(buf, 100, fp);
sscanf( buf, "%d", &(data[i]) );
}
sscanf( buf, "\n" );
close( fp );
printf( "n_data %d\n", n_data );
for( i=0; i<n_data; i++ )
printf( " %d", data[i] );
printf( "\n" );
}
ちなみに、2行の fgets(buf, 100, fp); をコメントアウトして、
"sscanf( buf," を "fscanf( fp," に変更するとうまく動作します。
お礼
ありがとございます。 マニュアルを頑張って読んでやってみます!