2015-01-24 4 views
0

У меня есть эти слова из текстового файла, каждый из которых разделен пробелом '\ t'.C++: функция getline() не включает последний символ/строку при чтении из файла

Я хочу, чтобы иметь возможность напечатать эти слова в отдельных строках

Например: эти слова из текстового файла:

hel lo im carlos 

Результат, я хочу:

hel lo 
im 
carlos 

В результате я получаю:

hel lo 
im 

вот код:

string ReadString(ifstream &file){ 
    char buf[1024]; 
    file.getline(&(buf[0]), 1024, '\t'); 
    return string(buf); 
} 

main(){ 
    ifstream delimfile("new.txt"); 
    while(1){ 
     string words = ReadString(delimfile); 
     if(delimfile.eof()==true) 
      break; 
     cout << words << endl; 
    } 
    delimfile.close(); 
} 

вся помощь ценится

+0

Было бы нормально работать, если вы поставите вкладку после последнего слова. – QuentinUK

ответ

1

Попробуйте это:

while(1) 
{ 
     string words = ReadString(delimfile); 
     cout << words << endl; 
     if(delimfile.eof()==true) 
      break; 
     //cout << words << endl; 
} 
4

Ваша последняя читать не будет читать до конца файла (так как там нет \t для это нажать) и установить бит EOF. Затем вы проверяете, установлен ли бит EOF и выйдет из цикла. Изменение вашего условия, чтобы проверить delimfile.fail(), исправит это (потому что fail установлен, когда чтение действительно не работает).

Вы также можете перенести вывод слова над условием, но это предполагает, что чтение из файла работает, что является плохим способом написания кода. Аналогично, наличие дополнительной вкладки в конце вашего файла сделает ваш код работать, но только делает его безопасным от этой проблемы.

Однако, если бы я собирался написать это сам, я бы писать так:

while (std::getline(file, words, '\t')) { 
    cout << words << endl; 
}