Не работает чтение текстового файла в C++

В цикле While получаю ввод из текстового файла с проверкой на EOF, в итоге последний символ в файле зацикливается и выводится бесконечно, какая-то проблема с EOF, при том что этот файл я создаю ранее в коде ниже. Подскажите почему так и как это исправить?

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

const int f_size = 50;


int main(void)
{
    int u_age;
    char ch;
    std::string u_name, u_city, f_name;

    std::ofstream u_txt1;

    std::cout << "Enter your name: ";
    std::cin >> u_name;
    std::cout << "Enter your age: ";
    std::cin >> u_age;
    std::cout << "Enter your city: ";
    std::cin >> u_city;
    f_name = u_name + "_info.txt";
    u_txt1.open(f_name);
    u_txt1 << "Your name is " << u_name << std::endl;
    u_txt1 << "Your age is " << u_age << std::endl;
    u_txt1 << "Your city is " << u_city;
    u_txt1.close();

    std::ifstream u_txt2;
    u_txt2.open(f_name);
    if (!u_txt2.is_open())
    {
        std::cout << "Couldnot open this file: " << f_name << std::endl;
        std::cout << "Programm terminating";
        exit(EXIT_FAILURE);
    }
    u_txt2.get(ch);
    while (!(ch == EOF))
    {
        std::cout << ch;
        u_txt2.get(ch);
    }
    u_txt2.close();


    return 0;
};  

Ответы (2 шт):

Автор решения: ВЛ 80

Метод std::ifstream(char_type & ch) пытается получить один символ, и сохраняет его, если его удалось прочитать из файла.

В противном случае, метод оставляет ch без изменения и устанавливает failbit и eofbit биты.

Когда std::ifstream доходит до конца файла, то EOF не сохраняется в ch. ch остаётся прежним, поэтому цикл while (!(ch == EOF)) продолжается бесконечно.

Поменяйте его на:

while (u_txt2.get(ch).good())
{
    std::cout << ch;
}

Метод good() возвращает true, если самая последняя операция ввода/вывода была завершена успешно. Соответственно, когда std::ifstream обнаруживет конец файла, этот метод возращает false, и цикл прерывается.

→ Ссылка
Автор решения: dahoonpao

Может проще использовать построчное чтение?

#include <iostream>
#include <fstream>
#include <string>

int main()
{
    std::fstream txtfile;
    txtfile.open("exp.txt");
    std::string line;

    while (std::getline(txtfile, line))
    {
        std::cout << line << std::endl;
    }
    txtfile.close();

    return 0;
}
→ Ссылка