okuma bu iki farklı yöntemde farkların ne açıklayabilir.
operator>>
, okuma teşebbüs ve başarılı veya başarısız olmuştur sonra olduğu halde akışı için bir başvuru döndürür ve başarısız olursa o ya da false
başarılı olursa akım true
değerlendirir. eof()
için test yapılması, dosyanın içinde yararlı bir veri bulunamayacağı, ancak henüz EOF'ta bulunamayacağı, daha sonra okuduğunuzda EOF'ta olduğu ve okunmanın başarısız olduğu anlamına gelir.
Başka bir önemli ayrıntı, akışlar için operator>>
'un boşluk bırakmadığı, tüm önde gelen boşlukları atlamasıdır. Bu yüzden bir dosya okunmadan önce EOF'ta olamaz ve bir okumadan sonra EOF'ta olabilir. Ayrıca, dosyadaki sonraki veriler tamsayı olarak okunamayan veriler olduğunda (örneğin, bir sonraki veri x
) yalnızca EOF'ta değil, çok önemli olduğunda da çalışır.
Örnek: sonradan
int x, y;
f >> x;
if (!f.eof())
f >> y;
f
varsayarsak ilk okuma başarılı olur 123␣
(␣ demektir boşluk) verileri içeren bir dosya, ancak dosya:
kod göz İçinde daha fazla tamsayı yok ve EOF'ta değil var. İkinci okuma başarısız olur ve dosya EOF'ta olur, ancak bilmeden önce okumaya çalıştığınız için EOF için test ettiniz. Daha sonra kodunuz tanımsız davranışa neden olur, çünkü y
başlatılmamış olur.
[this] (http://stackoverflow.com/questions/6512173/ifstream-not-reading-eof-character) ve diğerleri de. – Rapptz