Soru dizede eof için kontrol etme :: getline


Dosyanın sonunu kullanarak nasıl kontrol ederim? std::getline işlev? Kullanırsam eof() sinyal vermeyecek eof dosya sonu ötesini okumaya çalışana kadar.


32
2018-02-12 11:31


Menşei


o eof önerilmez, ancak farklı bir nedenden dolayı doğru değildir. EOF geçmişini okumak kesinlikle EOF için test etmek istediğinizde ne yaparsınız? eof bu konuda iyi çalışır. - Konrad Rudolph


Cevaplar:


C ++’daki kanonik okuma döngüsü:

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)
}

43
2018-02-12 12:03



Bu cevap sadece harika. Hata mesajlarına ihtiyacınız varsa, bu (sadece) yoldur. Bunu anlamak için zaman harcıyor: gehrcke.de/2011/06/... - Jan-Philip Gehrcke


Sadece okuyun ve ardından okuma işleminin başarılı olduğunu kontrol edin:

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

Başarısızlık birkaç nedenden dolayı olabileceğinden, eof Ne olduğunu görmek için üye fonksiyonu aslında EOF idi:

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

getline akışı daha küçük bir şekilde yazabilmeniz için döndürür:

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

10
2018-02-12 11:44