2013-05-16 47 views
5

herhangi karakterler evet, bu nasıl yapabileceğini okumak ve bir ifstream bırakılan olup olmadığını kontrol için bir yol var mı okumak için bırakılır olmadığını kontrol edin. Bunun mümkün olmadığını kesin olarak biliyorsanız, lütfen bana söyleyin.C++ std :: lfStream: charaters

DÜZENLEME: Ben daha genel olarak sorumu değiştirdi.

+0

olmak ld. Yani, açık olmak gerekirse, bunu engellemeden yapmanın bir yolu yoktur. –

cevap

4

, sen peek() işlevini kullanabilirsiniz ne düzenleme sonrasında yaklaşık soruyorsun almak için:

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

Ama bu 'daha genel' sorusu olmadığını akılda tutmak denilen, farklı bir soru (yani, orijinal soru Yara sarıcı bu uygulamadan olduğunu Bir hata) engelleme söz Silinen bazı yorumlarda

+0

Bunun aynı soru olması gerektiğini düşündüm, sadece okunacak karakterlerin olup olmadığını öğrenmek istedim. Bir okuma gerçekleştirmek engellemek veya olmaz diye soru ve söz kendisinin değil parçasını soran tek nedeni olarak düşünülen bilmek istiyorum Çünkü: benim ilk soru olarak gönderilebilir Her şey bu bilgilere sahip isteyeyim niçin oldu . Anlaşıldığı üzere, bu bilgi problemimi çözmek için çok önemlidir, bu yüzden başka bir Soru sormalıydım. Bu yüzden soruyu ilk hedeflediğim gibi bırakacağım (şimdiki gibi) ve yeni bir soru sormayı düşüneceğim. – FSMaxB

+0

@FSMaxB MooingDuck'un işaret ettiği gibi, bunu engellemeden, yani okuma ve başarısız okumadan, ** ilgili karakter dizisi ** 'nin sonraki karakterinden (belirtmiş olduğunuz bazı silinmiş sürümlerde) yapmanın bir yolu yoktur. seri bağlantı noktası) ifstream nesnesinin içinde bulunan arabelleğe. Gözetledin karakter okunmamış kalır, böylece ifstream sonraki okuma iade edecek, ancak akışı içine harici cihazdan geldiğinde sonra sadece gerçekleşecek. – Cubbi

2

Sen while durumda okuma işlemini koymalıyız: akışı boş veya başka hata oluşana kadar okuyacak

while(stream >> buffer) { 
    ... 

. Eğer gerçekten bir defada bir karakter okuma çalışıyorsanız

... ama, bunu okumalısınız: Reading a single character from an fstream?

+0

akışı >> tampon hep engelliyor, onu nereye koyacağımı fark etmez. – FSMaxB

+0

Bağlantınızdaki çözüm de engelleniyor. – FSMaxB