2010-03-12 3 views
1
while(getline(fileIn,line)) 
{ 

    fileOut <<line<<endl; 

} 


while(getline(fileIn,line)) 
{ 

    if(fileIn.eof()) 
    break; 
    fileOut <<line<<endl; 

} 

Я пробовал оба эти фрагмента кода, а второй также читает прошлый конец файла и не прерывается. Может ли кто-нибудь сказать мне, почему?Как определить конечный файл при использовании getline?

Я просто читаю из файла и записываю строки.

+2

Опубликовать больше кода. – 2010-03-12 01:15:46

ответ

0

Это запятая между «fileIn» и «eof()» ??? (второй пример)

Одна вещь, которую я хотел бы сделать, это включить exceptions на моих потоках. YMMV:

ifstream file; 
file.exceptions(ifstream::eofbit | ifstream::failbit | ifstream::badbit); 
+1

eofbit редко делает то, что хочет пользователь, и позволяет исключать его, как правило, очень плохую идею. Этого достаточно, чтобы позволить failbit иметь полную обработку ошибок, но я бы не рекомендовал этого, если программа читает до конца, так как это приведет к тому, что исключение будет выбрано в исключающей (но исключаемой) ситуации. – Tronic

+0

Это была опечатка, и я ее исправил. но проблема остается. – djones2010

+0

@Tronic хорошие моменты – pestilence669

0

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

3

Функция getline возвращает ссылку на поток, который вы читаете. Он оценивает значение false, если вы попытаетесь прочитать минута EOF. Поток находится в хорошем состоянии, когда вы читаете последнюю строку файла. Таким образом, вы никогда не достигнете if-теста во втором блоке кода.

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