Некорректный вывод после чтения файла C++

195
26 ноября 2016, 19:06

Добрый день! У меня имеется статический метод listOfStudents() который открывает текстовый файл и считывает оттуда мои данные...

Мой текстовый файл выглядит вот так:

Как вы можете видеть на картинке простой текстовый файл с данными.

Моя задача это взять оттуда Имя и Фамилию и вывести на экран:

Полноценно мой метод выглядит вот так:

static void listStudents(){
    cout << endl << "List students" << endl<< endl;
    ifstream textfile;
    string line;
    string unused = "";
    textfile.open("students.txt");
    if(textfile.is_open()){
        int count = 0;
        for(int i = 0 , j = 0; !textfile.eof(); i++){
                if(i == j){
                    count++;
                    textfile >> line;
                    cout << count << ": " << line;
                    textfile >> line;
                    cout << " " << line << endl;
                    j+=11;
                }else{
                    textfile >> unused;
                    unused = "";
                }
        }
    }else{
        cout << "You don't have any students!" << endl;
    }
    textfile.close();
    cout << endl << endl;
    main();
}

У меня в текстовом файле имеет 4 студента, и когда я вывожу на экран происходит следующее:

Как видите все нормально показывает, только вот в конце почему то генерирует еще 1 строку где дважды дублируется фамилия предыдущего студента. Вопрос: Почему он так делает? И каким способом можно это исправить?

Answer 1

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

Потому что не надо проверять

!textfile.eof()

На момент проверки конец файла ещё не достигнут - он достигается только при попытке чтения. Соответственно, прочитать ничего не удаётся и в переменной сохраняется предыдущее значение. А ближайшая проверка осуществляется только перед следующей итерацией цикла.

READ ALSO
выводит неправильные значения

выводит неправильные значения

В чем ошибка?задание вычисление функции разложения в рядво внутреннем цикле значение суммы ТЕКСТ ЗАДАНИЯ

177
Как создавать ярлыки средствами С++, WinAPI

Как создавать ярлыки средствами С++, WinAPI

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

352
Считывание пробела

Считывание пробела

Добрый деньИзучаю инструкцию SWITCH

192
zlib сжатие потока

zlib сжатие потока

На первый write все хорошо, 2 и следующие возвращают Z_BUF_ERROR

188