2017-02-02 20 views
0

ファイルfoobar.txtはテキストfoobarが含まれている場合は、なぜfscanfは変換してからcharに変換しないのですか?その後、次のコードで

char s[16], c; 
fp = fopen("foobar.txt", "r"); 
fscanf(fp, "%[f]s%c", s, &c); 

fscanfリターン1と期待通りではない2。私はfscanfへの呼び出し分けた場合一方

:予想通り、その後

fscanf(fp, "%[f]s", s); 
fscanf(fp, "%c", &c); 

の両方が1を返します。

fscanfはなぜ機能しませんか?

+4

'"%を返すことを中止し、返す第2のケースで1.を、あなたが述べたように、その明白な入力でsを見つけることができない最初のケースでは、

fscanf("%[f]%c", s, &c); 

[ '%[f]%c "' – BLUEPIXY

+1

スキャンセットは別々の変換指定子であり、 '%s'の修飾子ではありません - [' scanf() '参照] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html)を参照してください。 –

+0

ありがとうRTFMは十分に注意深くはありませんでした。それを答えにしてください。 –

答えて

2

sがあってはならないので、代わりにそれがあるべき

fscanf("%[f]%c", s, &c); 

scanf()形式でsを見つけたが、入力しないで、それは停止し、それまで1つの引数が一致したため1を返します。

事がある、sはフォーマットの一部ではない、[]は書式指定子であり、それは、単一の文字fが含まれているので、あなたはより慎重にドキュメントを読んでください、あなたはsがないことを確認することができます実際にはfscanf()は要求された入力の一部として考慮していますが、fの後にoがあるので、fsobarを試してください。

fの後に2番目の呼び出しが停止しても消費されないため、2番目の呼び出しが1文字を消費するため、両方とも正しく1を返します。

2

sを削除して、次のように変更してください。 fscanf()はそれがfscanf() 1.

関連する問題