11

fscanfは、ファイル内のデータを読み取るときに何を返しますか。例えば、

int number1, number2, number3, number4, c;

c = fscanf (spFile, "%d", &number1);
//c will be 1 in this case.

c = fscanf (spFile, "%d %d %d %d", &number1, &number1, &number3, &number4);
//in this case, c will return 4.

引数の数に応じてなぜそのような値が返されるのか知りたいだけです。

4

5 に答える 5

15

Xscanfファミリーの関数のマンページから:

正常に完了すると、これらの関数は、正常に一致して割り当てられた入力項目の数を返します。早期のマッチングに失敗した場合、この数値はゼロになる可能性があります。最初の一致の失敗または変換の前に入力が終了した場合、EOFが返されます。読み取りエラーが発生した場合、ストリームのエラーインジケータが設定され、EOFが返され、エラーを示すためにerrnoが設定されます。

したがって、最初の呼び出しは1をfscanf返します。これは、1つの入力項目(&number1)がフォーマット指定子と正常に一致したためです%dfscanf4つの引数すべてが一致したため、への2番目の呼び出しは4を返します。

于 2013-03-10T02:54:55.087 に答える
3

cplusplus.comから引用します。

成功すると、関数は引数リストの項目の数を返します。このカウントは、一致の失敗、読み取りエラー、またはファイルの終わりに到達したために、予想されるアイテム数と一致するか、それより少なくなる(ゼロになる場合もあります)可能性があります。

読み取りエラーが発生した場合、または読み取り中にファイルの終わりに達した場合は、適切なインジケーターが設定されます(feofまたはferror)。また、データを正常に読み取る前にいずれかが発生した場合は、EOFが返されます。

- 編集 -

文字列に読み込まれるバイト数を決定することを意図している場合。

int bytes;
char str[80];
fscanf (stdin, "%s%n",str,&bytes);
printf("Number of bytes read = %d",bytes);
于 2013-03-10T02:57:30.593 に答える
1

マニュアルページから:

*これらの関数は、正常に一致および割り当てられた入力アイテムの数を返します。これは、提供された数より少ない場合もあれば、早期の一致が失敗した場合はゼロになる場合もあります。*

したがって、1つ目はファイルから1つの整数を読み取ることができる場合は1を返し、2つ目はファイルから4つの整数を読み取ることができる場合は4を返します。

于 2013-03-10T02:56:15.940 に答える
1

これはたまたま非常に単純な質問であり、charlesによって適切に回答され、私の前で編集されました。しかし、彼らはあなたが次に行き詰まったときにあなたがそのようなものをどこで探すべきかについて言及しませんでした。

最初の質問-fscanfは、入力を読み取り、適切な入力を読み取ったアイテム(可変アドレス)のバイト数やカウントなど、読み取られたデータに関する情報を報告することになっているフォーマットされた入力(スキャン)関数のファミリーに属しています割り当てが成功しました。

ここで、fscanfは、関数呼び出しで提供されたフォーマット文字列と入力ファイル内の一致をチェックし、それに応じて(位置の順に)変数-アドレスに値を割り当て、完了すると、の合計カウントを返すことになっています。成功した割り当ての数。したがって、1とnextの結果は4でした(入力が適切に提供されたと仮定)。

第二部:どこを見ればいいですか?--このような機能の詳細については、マニュアルページまたはposix docを参照すると、簡単に見つけることができます。

お気づきの方もいらっしゃると思いますが、前の2つの回答には、マニュアルページからの抜粋も含まれています。

お役に立てれば。

于 2013-03-10T03:22:24.183 に答える
1

戻り値は、への引数の数に依存せず、によってfscanf正常にスキャンされた値の数に依存しますfscanf

于 2013-03-10T03:49:47.427 に答える