1

fscanf がファイル内の新しい行 \n に到達したことを知る方法。私はそれを行うために独自の機能を使用しています。必要なパターンに fgets を使用してから sscanf を使用できることはわかっています。しかし、私の要件は安定していません。タブで区切られた文字列、改行で区切られた文字列、特殊文字で区切られた文字列を取得したい場合があります。したがって、fscanf からの新しい行を知る方法があれば、助けてください。または、別の方法も歓迎します。

前もって感謝します。

4

2 に答える 2

2
fscanf(stream, "%42[^\n]", buffer);

fgets(buffer, 42, stream) と同等です。42 を * に置き換えて、(printf でできるように) 引数でバッファー長を指定することはできません。その意味は、割り当てを抑制することです。そう

fscanf(stream, "%*[^\n]%*c");

次の行末文字まで (および含めて) 読み取ります。

[、c、および n 以外の変換指定子は、空白をスキップして開始します。

于 2009-08-04T13:15:40.893 に答える
1

優れた本「 The Practice of Programming 」の Kernighan と Pike は、長さを含む適切な書式指定子を作成する方法を示しsprintf()(AProgrammer による回答の例と同様)、それを の呼び出しで使用しscanf()ます。そうすれば、セパレーターを制御することもできます。このアプローチの「非効率性」についての懸念はおそらく見当違いです。

とはいえ、私はほとんどscanf()の場合、ファイル I/O に一連の関数を使用しません。ある種の「get line」ルーチンを使用してデータを文字列に取得し、sscanf()関数ファミリを使用してデータを分割します。または、より特殊な解析コードを使用します。

于 2009-08-04T20:58:40.743 に答える