Прежде всего, ваш while
цикл неправильный.Фактически, такой цикл while
равен почти всегда неверно.
Вы должны писать цикл следующим образом:
while (myReadFile >> output)
{
if (line > 20) {
cout << output;
}
line++;
}
Ваш цикл while(!myReadFile.eof())
неправильный,поскольку флаг eof
(или любой другой флаг сбоя) установлен после , попытка чтения из потока не удалась;это означает, что если попытка чтения не удалась, вы все равно выводите, потому что вы все еще находитесь внутри цикла, а остальная часть кода в цикле все еще выполняется, когда это на самом деле не должно.
Inмоя версия, однако, если попытка чтения (т.е. myReadFile >> output
) не удалась, то возвращенный std::istream&
неявно преобразуется в false
, и цикл немедленно завершается.И если это не сработает, возвращенный поток неявно преобразуется в true
.
Кстати, мне кажется, что вы хотите читать построчно, вместо этогоиз слова в слово.Если это так, то вы должны написать это как:
std::string sline; //this should be std::string
while (std::getline(myReadFile, sline))
{
if (line > 20) {
cout << sline;
}
line++;
}
Снова std::getline
возвращает std::istream
.Если чтение было успешным, возвращенный поток неявно преобразуется в true
, и цикл продолжится, или, если он был неудачным, то неявно преобразуется в false
ицикл выйдет.