@AlexB_49
Студент

Как правильно вывести информацию с текстового файла в консоль на С++?

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

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

if (choice == 2) //ЗАПИСЬ В ФАЙЛ
		{
			string name;
			int day;
			int month;
			string path = "MyFile.txt"; // путь к файлу

			cout << "\n    Enter name: ";
			cin >> name;
			cout << "\n    Enter day: ";
			cin >> day;
			cout << "\n    Enter month: ";
			cin >> month;

			fstream fout(path, ios::app);

			if (!fout.is_open())
			{
				cout << "\nWe couldn't open the file.";
			}
			else
			{
				fout.setf(ios::left);
				fout.width(9);
				fout << name << ' ';
				fout.width(9);
				fout << day << ' ';
				fout.width(9);
				fout << month << ' ';
				fout.width(9);
				fout << day * month << endl; // в задачи нужно еще день и месяц перемножить

				fout.close();
			}
		}
if (choice == 1) //ЧТЕНИЕ С ФАЙЛА И ВЫВОД В КОНСОЛЬ
		{
			string name;
			int day;
			int month;
			string path = "MyFile.txt"; // путь к файлу

			ifstream fin;
			fin.open(path);

			if (!fin.is_open())
			{
				cout << "\nWe couldn't open the file.";
			}
			else
			{
				cout << setw(9) << "Name" << setw(9) << "Day" << setw(9) << "Month" << endl << endl;

				while (!fin.eof())
				{
					fin >> name;
					fin >> day;
					fin >> month;

					if (!fin.eof())
					{
						cout.width(10);
						cout << name;
						cout.width(10);
						cout << day;
						cout.width(10);
						cout << month;
						cout << endl;
					}
				}
			}

			fin.close();
		}
  • Вопрос задан
  • 1314 просмотров
Пригласить эксперта
Ответы на вопрос 1
NQUARE
@NQUARE
Вот хороший пример с объяснением.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы