質問
fscanfがファイルの新しい行\ nに到達したことを知る方法。 私はそれを行うために独自の機能を使用しています。必要なパターンにfgetsを使用してからsscanfを使用できることを知っています。しかし、私の要件は安定していません。TABで区切られた文字列、改行で区切られた文字列、特殊文字で区切られた文字列を取得したい場合もあります。したがって、fscanfからの新しい行を知る方法があれば、助けてください。または、他の方法も歓迎します。
事前に感謝します。
解決
fscanf(stream, "%42[^\n]", buffer);
は、fgets(buffer、42、stream)と同等です。引数でバッファ長を指定するために42を*に置き換えることはできません(printfでできるように)、その意味は割り当てを抑制することです。だから
fscanf(stream, "%*[^\n]%*c");
次の行末文字まで読みます(含まれます)。
[、c、n以外の変換指定子は、空白をスキップして開始します。
他のヒント
優れた本のカーニガンとパイク 'プログラミングの実践 ' sprintf()
を使用して長さを含む適切な形式指定子を作成する方法を示し(AProgrammerの回答の例と同様)、それを scanf()の呼び出しで使用します
。そのようにして、セパレータを制御することもできます。このアプローチの「非効率性」への懸念は、おそらく誤った方向に導かれています-代替案を正しくするのは困難です。
とはいえ、私は通常、ファイルI / Oに scanf()
ファミリーの関数を使用しません。ある種の「行取得」ルーチンを使用してデータを文字列に取得し、 sscanf()
ファミリーの関数を使用してデータを分割します-または他のより特殊な解析コード。
所属していません StackOverflow