Вывод на консольные перекрытия

Возможный дубликат:
Чтение из текстового файла, пока EOF не повторяет последнюю строку

Вывод cout из моей программы на c ++ выводит на консоль, но перекрывается.

Например:

while(pFile.good()){

getline (pFile, pLine);
cout<<pLine;
}

Этот код печатает последнюю строку и некоторые остатки предыдущей строки.

Я использую vi на Cygwin. Это случилось на ровном месте. Я изменил некоторые настройки?

0

Решение

Причина, по которой ваша последняя строка печатается дважды, заключается в том, что ваш последний вызов getline () не удался, но вы все еще печатали pLine (хотя его содержание не определено).

while(pFile.good()){

getline (pFile, pLine);  // What happens if this line fails.
// Like when you read **past** the end of file.
cout<<pLine;
}

Правильная версия вашего кода:

while(pFile.good()){

if (getline (pFile, pLine))
{    cout<<pLine;
}
}

Но это обычно пишется как:

while(getline (pFile, pLine))
{
// The loop is only entered if the read worked.
cout<<pLine;
}

Помните, что последний успешный вызов getline () читает вплоть до но не после конца строки. Это означает, что следующий вызов getline () завершится ошибкой и установит бит EOF.

Также обратите внимание, что ваши выходные данные слипаются, потому что вы не добавляете разделитель ‘\ n’ между строками. Примечание: getline () читает следующий символ ‘\ n’, но этот символ завершения не добавляется в строку pLine,

0

Другие решения

getline() сбрасывает любой встречающийся символ новой строки. Чтобы ваш код не сливал все строки в одну большую строку, вам нужно сделать это:

cout << pLine << endl;

Как указал Крис, вы также должны использовать getline() как твой while состояние. В противном случае поток может считаться «хорошим» сейчас, но достигните EOF при вызове getline(), Итак, попробуйте этот цикл:

while (getline(pFile, pLine)) {
cout << pLine << endl;
}
1

здесь вы пишете в той же строке, потому что getline просто отбрасывает символ новой строки, поэтому вы должны написать <<endl

 while(pFile.good()){

getline (pFile, pLine);
cout<<pLine<<endl;
}
0
По вопросам рекламы [email protected]