Вывод содержимого из 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;
}