2013-05-16 23 views
5

有沒有辦法檢查是否有任何字符留在ifstream中讀取,如果是的話,我該怎麼做。如果你確定這是不可能的,請告訴我。C++ std :: ifstream:檢查字符是否被讀取

編輯:我改變了我的問題是更普遍。

+0

在你提到的一些被刪除的評論阻止。所以,要清楚的是,沒有阻礙就沒有辦法做到這一點。 –

回答

4

要明白你問的是編輯後的東西,你可以使用peek()功能:

給定一個std::ifstreamf

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"; 

但請記住,這是不是一個「更普遍」的問題,這是一個不同的問題(即,將其應用到你原來的問題WOU LD是一個錯誤)

+0

我認爲這是一個相同的問題,因爲我只是想知道如何找出是否有剩餘字符需要閱讀。在我最初的問題中發佈的所有內容都是爲了解釋我爲什麼要獲得這些信息:因爲我想知道執行閱讀是否會阻止我認爲只是提出問題的原因而不是問題本身的一部分。事實證明,這些信息對解決我的問題至關重要,所以我應該問另一個問題。所以我會留下這個問題,因爲我第一次打算這樣做(就像現在這樣),並考慮要求一個新的問題。 – FSMaxB

+0

@FSMaxB正如MooingDuck所指出的那樣,沒有阻止的方法是沒有辦法的,也就是說,在沒有實際閱讀或試圖讀取和失敗的情況下,**關聯字符序列**中的下一個字符(在你提到的某個刪除版本中串行端口)插入ifstream對象內部的緩衝區。偷看的字符將保持未讀,所以從ifstream中讀取的下一個字符將返回它,但它只會在它從外部設備到達流中後纔會發生。 – Cubbi

2

你應該把讀操作在while條件:

while(stream >> buffer) { 
    ... 

將讀取到的數據流是空的或發生其他錯誤。

...但如果你真的試圖在同一時間讀取一個字符,你應該閱讀:Reading a single character from an fstream?

+0

流>>緩衝區總是阻塞,放在哪裏並不重要。 – FSMaxB

+0

鏈接中的解決方案也被阻止。 – FSMaxB