2010-02-12 23 views
28

std::getline işlevini kullanarak dosya sonu için nasıl denetlerim? eof() kullanırsam, dosya sonu ötesini okumaya çalışana kadar eof sinyali olmaz.dizgideki eof için denetleme :: getline

+0

'Bu doğru, ama farklı bir nedenden dolayı. EOF geçmişini okumak * tam olarak * EOF için test etmek istediğinizde ne yaptığınızı, yani bu açıdan iyi çalışır. –

cevap

9

okuma işlemi başarılı olduğunu Sadece okumak ve sonra kontrol edin:

std::getline(std::cin, str); 
if(!std::cin) 
{ 
    std::cout << "failure\n"; 
} 

başarısızlık olabileceğinden dolayı nedenden için, aslında EOF oldu ne oldu görmek eof üye işlevini kullanabilirsiniz: Eğer daha derli toplu yazabilir böylece

std::getline(std::cin, str); 
if(!std::cin) 
{ 
    if(std::cin.eof()) 
     std::cout << "EOF\n"; 
    else 
     std::cout << "other failure\n"; 
} 

getline

akışını verir:

if(!std::getline(std::cin, str)) 
39

C++ kurallı okuma döngü: eof` tavsiye edilmez

while (getline(cin, str)) { 

} 

if (cin.bad()) { 
    // IO error 
} else if (!cin.eof()) { 
    // format error (not possible with getline but possible with operator>>) 
} else { 
    // format error (not possible with getline but possible with operator>>) 
    // or end of file (can't make the difference) 
} 
+1

Bu cevap sadece harika. Hata mesajlarına ihtiyacınız varsa, bu (sadece) yoldur. Bunu anlamak için zaman harcıyor: http://gehrcke.de/2011/06/reading-files-in-c-using-ifstream-dealing-correctly-with-badbit-failbit-eofbit-and-perror/ –