2013-05-16 3 views
5

ifstreamに読み込む文字が残っていないかどうかを確認する方法はありますか?これが不可能であることが分かっているなら、教えてください。C++ std :: ifstream:読み手に読み手が残っているかどうかを確認する

EDIT:私の質問はより一般的なものに変更されました。

+0

ブロックされたコメントの中には、ブロックされたものがあります。したがって、明確にするために、ブロックせずにこれを行う方法はありません。 –

答えて

4

を、あなたはpeek()機能を使用することができます。

f

if(f && f.peek() == EOF) 
     std::cout << "Nothing left to read\n"; 
    else 
     std::cout << "There is something to read or the stream is bad\n"; 

と呼ばれるstd::ifstreamを考える。しかし、これは「より一般的な」問題ではないことに注意してください、それはあなたの元の質問のWOUにこれを適用する別の質問(つまり、ありますエラーがあります)

+0

これは、読みたい文字が残っているかどうかを調べる方法を知りたかったのと同じ質問だと思っていました。私の最初の質問に掲示されているものは、なぜ私がこの情報を持っているのかを説明することでした。なぜなら、読書の実行がブロックされるかどうかを知りたいからです。質問をする理由だけであって、 。この情報は私の問題を解決するために不可欠な情報なので、別の質問をする必要があります。だから私は最初に(今のように)それを意図していたので質問を残し、新しい質問をすることを検討します。 – FSMaxB

+0

@FSMaxB MooingDuckは指摘しているように、ブロックせずにこれを行う方法はありません。つまり、**関連する文字列**の次の文字を実際に読んだり、読んだり失敗させたりすることなく**シリアルポート)をifstreamオブジェクトの内部にあるバッファにコピーします。読み込まれた文字は未読のままなので、ifstreamからの次の読み込みが返されますが、外部デバイスからストリームに到着した後にのみ発生します。 – Cubbi

2

あなたwhile状態で読み出し動作を置く必要があります:ストリームが空であるか、または別のエラーが発生するまで読みます

while(stream >> buffer) { 
    ... 

を。

...しかし、あなたは本当に一度に一つの文字を読み取ろうとしている場合は、この読みください:あなたが編集後の約求めているものを手に入れるためにReading a single character from an fstream?

+0

stream >>バッファは常にブロックしますが、どこに置くかは関係ありません。 – FSMaxB

+0

リンク内の解決策もブロックされています。 – FSMaxB

関連する問題