2017-05-03 5 views

答えて

6

eof()は、すべてのデータが消費されるときにtrueを返すことが想定されていません。あなたがを読むときにtrueを返すことになっています。データが利用可能であるよりも多くなります。

この例では、決して実行しません。特に

peekを読むために残さ何もない場合でも、EOF設定されていないだろう「要求」、です。あなたは、よく、覗き見ているからです。しかし、それあなたが出力peek()の結果を見ているものである、(一般-1)マクロEOFの値を返します。ストリームには何も付加されません。

使用する関数のドキュメントをお読みください。

+0

技術的にはその効果はプラットフォームに依存することができ、-1実際にEOFのコードではありません - EOFのコードは26ですが、「送信終了」のコード - 255一部のプロトコルでは、積極的にそれを使用、例えばFTPは、(その中にロシア文字яでファイルを転送したり、作成することが不可能 - 拡張ASCIIで文字コード255得たことので - のWindows XP FTPで非常に明白な問題を)それを使用しています – Swift

+0

@Swift:Cマクロ 'EOF'は別個のものですASCII制御コード「EOF」から取得する。あなたはそれが基本的に常にあるものの、それは、実装定義だと-1ではないかもしれないということだね(他の負の値は、目的を持っていないため、そして何の正の値または0は意味がありません)。 –

0
std::istream::peek 

覗く次の文字は、それを抽出することなく、入力シーケンス、 の次の文字を返し: に次の文字をストリームから抽出するように文字が残っています。

呼び出しの前に内部状態フラグがすでに設定されているか、または に設定されている場合、関数はファイルの終わりの値(EOF)を返します。

http://www.cplusplus.com/reference/istream/istream/peek/

関連する問題