2012-03-15 13 views
0

Cがファイルを読み込む方法についてちょっと混乱します。 fscanfを使って(複数の行を持つ)ファイルを読み込み、配列[0]に格納するとします。 if文を使用して\n文字を確認し、2番目の行を配列[1]に読み込み続けることはできますか?またはファイルの先頭から読み込むために繰り返しますか?行解析のために配列を設定するには

答えて

1

これらの機能は、現在の位置から常に読み取られます(たとえば、ftell()を使用して取得できます)。読み込み後、現在位置は常に更新/移動されます(ただし、反対の機能をいくつか除いて)。位置を自分で変更するには、fseek()を使用します。補足:fscanf()を使用しないでください。入力の形式が期待どおりでない場合には、結果が予測できない可能性があります。

+0

を使用すると、これらのような関数とはどういう意味ですか?代わりにfgetsを使うべきですか? –

+1

本当にあなたがしたいことにかかっています。一般的に、 'fgets()'や 'fread()'(そして 'fscanf()'以外の関数)はより安全であると考えられます。しかし、ファイルを 'fgets()'という行で読み込むのは、(ストリームを使いたくない限り)完璧な選択でなければなりません。 – Mario

+0

私はfgets()であることを私がもっとよく知っているものを使うつもりです。ありがとう –

0

まず、scanf()に行全体を読み取るのはやや難しい作業です。あなたは仕事のためにfgets()を使うことをお勧めします。また、各行の読み込みに十分なメモリがあることを確認する必要があります。

scanf("%s",...)は、最初の空白(大まかに言えば、行ではなく、行が単なる単語で構成されていない限り)までの文字を読み取ることを意味することに注意してください。

私が書くかもしれません:

enum { MAX_LINES = 10, MAX_LINESIZE = 256 }; 
char array[MAX_LINES][MAX_LINESIZE]; 
int i = 0; 

while (i < MAX_LINES && fgets(array[i], sizeof(array[i]), stdin) != 0) 
    i++; 
関連する問題