Вывод содержимого из txt файла методом get | C++


Только начал учить работу с файлами на языке С++
Проблема: Немогу (неумею/непонимаю) при нажатии выводить по одному слову из файла myFile.txt
Уже читал документацию о методе .get() но ничего для себя не вывел
Мой код:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

void outputDataBase()
{
    string path = "myFile.txt";

    ifstream fin;
    fin.open(path);
    if (fin.is_open()) {
        cout << "File was open :)" << endl;
        char ch;
        while (fin.get(ch))
        {
            cout << ch;
            
        }
    }
    else {
        cout << "!!!Error!!!  File not open!" << endl;
    }
    fin.close();
}

int main()
{
    outputDataBase();

    return 0;
}

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

Автор решения: Evgenii Izhboldin

Я может не совсем задачу понял, но если простой вариант, то можно просто проверять что текущий символ это разделитель, и если это так, то ожидать нажатия кнопки, пример привел ниже:

void outputDataBase()
{
    const char DELIMETR = ' ';

    string path = "123.txt";

    ifstream fin;
    fin.open(path);
    if (fin.is_open())
    {
        cout << "File was open :)" << endl;
        char ch;
        while (fin.get(ch))
        {
            if (ch == DELIMETR)
            {
                cin.get();
            }

            cout << ch;
        }
    }
    else
    {
        cout << "!!!Error!!!  File not open!" << endl;
    }
    fin.close();
}

int main()
{
    outputDataBase();

    return 0;
}
→ Ссылка
Автор решения: wololo

Если вам принципиально важно считывать файл с помощью get(), то попробуйте так:

#include <iostream>
#include <string>
#include <fstream>
#include <locale> //Для std::isspace()

bool is_separator(std::ifstream::int_type symbol)
{
    return std::isspace(std::ifstream::traits_type::to_char_type(symbol), std::locale());
}

void outputDataBase()
{
    std::string path = "myFile.txt";

    std::ifstream fin(path);
    if (fin.is_open())
    {
        //Символ конца файла
        auto eof = std::ifstream::traits_type::eof();
        while (true)
        {
            //Заглянем, какой следующий символ в файле без его извлечения.
            auto symbol = fin.peek();
            //Если следующий символ - конец файла, то заканчиваем чтение файла.
            if (symbol == eof)
                break;
            //Если следующий символ - символ-разделитель, то
            if ( is_separator(symbol) )
            {
                //Считываем символ-разделитель, но не выводим.
                fin.get();
                continue;
            }

            //Следующий символ не конец файла и не символ-разделитель.
            //Ждём нажатия Enter.
            while (std::cin.get() != '\n')
                ;

            //Считываем из файла символы слова и выводим их.
            while (true)
            {
                //Считать символ из файла.
                auto symbol = fin.get();
                //Если при считывании произошла ошибка или считанный символ - символ-разделитель, то...
                if ( symbol == eof || is_separator(symbol) )
                    break; //... прекращаем вывод слова.
                cout << std::ifstream::traits_type::to_char_type(symbol);
            }
        }
        fin.close();
    }
}
→ Ссылка
Автор решения: AlexGlebe
// g++ -Wall -Wextra -Wpedantic -std=c++11 printwords.cpp -o printwords
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

void outputDataBase()
{
    string path = "myFile.txt";

    ifstream fin;
    fin.open(path);
    if (fin.is_open()) {
        cout << "File was open :), press Enter" << endl;
        char ch;
        // флаг, что слово ещё не печатали
        bool  wordempty = true ;
        while(fin.get(ch)) {
          cout << ch ;
          if (isspace(ch)) {
            if (not wordempty) {
              wordempty = true ;
              // если слово уже напечатали
              // ждём нажатие клавиши Enter
              char c ;
              cin.get(c);
              continue ; } }
          else
            // букву печатаем
            wordempty = false ; }
      // закрываем файл только когда открыли
      fin.close(); }
    else 
      // печатаем в поток ошибок
        cerr << "!!!Error!!!  File not open!" << endl;
      
}

int main()
{
    outputDataBase();

    return 0;
}
→ Ссылка
Автор решения: Ростислав Красный
#include <iostream>
#include <fstream>

int main()
{
    std::ifstream input{"myFile.txt", std::ios::in};

    if (!input.is_open()) {
        std::cerr << "Can't open file, terminating." << std::endl;
        return 1;
    }

    std::string word;

    while (input >> word)
    {
        std::cin.get();
        std::cout << word << std::endl;
    }

    return 0;
}
→ Ссылка