質問

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()ファミリーの関数を使用してデータを分割します-または他のより特殊な解析コード。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top