Как работает getline ()? - PullRequest
       3

Как работает getline ()?

1 голос
/ 10 апреля 2011

У меня есть этот кусок кода, который я использую для загрузки связанного списка из двоичного или текстового файла .. Он отлично работает для текстовых файлов, но всегда загружает дополнительную строку в двоичном регистре, поэтому мне нужно знать, какgetline works:

while(1)
{
     if(!file.good())
          break;

     getline(file,line);
     student.name=line;

     getline(file,line);
     student.phone=line;

     current->insert(student);
}

Ответы [ 2 ]

3 голосов
/ 10 апреля 2011

всегда загружает дополнительную строку

Конечно: вы вставляете прочитанное без проверки того, что было прочитано успешно.

Вам необходимо переместить file.good() тест после попытки чтения.

Кроме того, нет необходимости явно проверять good, результат getline уже дает вам статус. Канонический способ загрузки простых данных из файла внутри цикла заключается в следующем:

student_type student;
while (getline(file, student.name) and getline(file, student.phone))
    current->insert(student_type(student)); // Makes explicit copy!
2 голосов
/ 10 апреля 2011

getline () читает завершенную строку \ n или EOF.

Так что в двоичных файлах это мало что значит.) символы были извлечены или найден символ-разделитель (который является разделителем, если указан этот параметр, или '\ n' в противном случае).Извлечение также останавливается, если во входной последовательности достигнут конец файла или если во время операции ввода произошла ошибка.

...