14

構成ファイルから設定行を読み取る fscanf があります。これらの設定には、次のような厳密に事前定義された形式があります

name1=option1;
name2=option2;
...

だから基本的に私はそうします

fscanf(configuration,"%[^=]=%[^;];",name,option);

ここで、構成はファイル ストリームであり、名前とオプションはプログラミング バッファです。

問題は、名前バッファーに不要な改行文字が含まれていることです。改行文字をスキップするように設定された「[^...]」で見逃したフォーマット指定子はありますか? とにかく、フォーマット指定子で解決できますか?

ところで:これを書いて改行文字を飲み込む

"%[^=]=%[^;];\n"

改行文字がどこでも複数回繰り返される可能性があると思います。

4

3 に答える 3

15

フォーマット文字列の最後にスペースを追加するだけです:

"%[^=]=%[^;]; "

これにより、改行を含むすべての空白文字が食べられます。

cplusplus.comからの引用:

空白文字: この関数は、次の非空白文字の前にある空白文字を読み取って無視します (空白文字には、スペース、改行、およびタブ文字が含まれます。isspace を参照してください)。フォーマット文字列内の単一の空白は、ストリームから抽出された任意の数の空白文字 (ゼロを含む) を検証します。

于 2012-11-04T19:16:53.557 に答える
8

別の方法として、 を使用fgets()して行全体を文字列に読み取ってから、を使用することもできますsscanf()。これには、関数がどのデータを処理しているかを正確に確認できるという点で、デバッグに利点があります。

于 2012-11-04T19:28:34.523 に答える
1

これはうまくいきます:

fscanf(configuration,"%[^=]=%[^;];%[^\n]",name,option,dummy);

改行文字を消費する必要があります。そうしないと、改行が入力ストリームに残ります。

于 2012-11-04T19:14:55.337 に答える