2013-06-24 4 views
0

по какой-то причине, моя программа не печатает последнюю строку текстового файла, если последняя строка содержит меньше символов, чем буферчтения последней строки в C++

#include <iostream> 
#include <iomanip> 
#include <fstream> 

int main() 
{ 
    std::ifstream read("test.txt"); 
    char buffer[12]; 

    while(!read.eof()) 
    { 
     read.getline(buffer,11); 
     if(!read.eof()) 
      std::cout<<buffer<<'\n'; 
     read.clear(); 

    } 
    read.close(); 

    return 0; 
} 
+2

Возможный дубликат [Какой предпочтительный шаблон для чтения строк из файла на C++?] (Http://stackoverflow.com/questions/7219062/whats-preferred-pattern-for-reading-lines-from-a-file -in-c) – Nawaz

ответ

3

Вы печатаете линию под условием, что if(!read.eof()), но это условие будет оцениваться как false после того, как последняя строка была прочитана с помощью getline().

+0

thx, когда я удалил if-тест, программа не сработала, потому что я сначала сделал ясность, а затем проверил в то время, если он достиг конца файла. Поэтому я должен был прояснить перед getline в цикле while. Теперь программа отлично работает :) – breght

+1

Зачем вам 'read.clear()' здесь вообще? –

+0

Он может или не может оцениваться как false после того, как была прочитана последняя строка. Тот факт, что результаты могут быть непоследовательными, является основной причиной: _why_ мы никогда не проверяем 'eof()', пока не узнаем, что вход не сработал. –

Смежные вопросы