fscanf がファイル内の新しい行 \n に到達したことを知る方法。私はそれを行うために独自の機能を使用しています。必要なパターンに fgets を使用してから sscanf を使用できることはわかっています。しかし、私の要件は安定していません。タブで区切られた文字列、改行で区切られた文字列、特殊文字で区切られた文字列を取得したい場合があります。したがって、fscanf からの新しい行を知る方法があれば、助けてください。または、別の方法も歓迎します。
前もって感謝します。
fscanf(stream, "%42[^\n]", buffer);
fgets(buffer, 42, stream) と同等です。42 を * に置き換えて、(printf でできるように) 引数でバッファー長を指定することはできません。その意味は、割り当てを抑制することです。そう
fscanf(stream, "%*[^\n]%*c");
次の行末文字まで (および含めて) 読み取ります。
[、c、および n 以外の変換指定子は、空白をスキップして開始します。
優れた本「 The Practice of Programming 」の Kernighan と Pike は、長さを含む適切な書式指定子を作成する方法を示しsprintf()
(AProgrammer による回答の例と同様)、それを の呼び出しで使用しscanf()
ます。そうすれば、セパレーターを制御することもできます。このアプローチの「非効率性」についての懸念はおそらく見当違いです。
とはいえ、私はほとんどscanf()
の場合、ファイル I/O に一連の関数を使用しません。ある種の「get line」ルーチンを使用してデータを文字列に取得し、sscanf()
関数ファミリを使用してデータを分割します。または、より特殊な解析コードを使用します。