Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2014, 02:39   #1
_lev
Пользователь
 
Регистрация: 16.06.2014
Сообщений: 11
По умолчанию Чтение структуры из файла

как прочитать данные из текстового файла?
Код:
#include "class.h"

#include <iostream>
#include <fstream>
using namespace std;
int n;
// Меню
void MIIT::menu()
{
	MIIT obj;
	int key;
	cout << "1) Создать файл" << endl;
	cout << "2) Открыть файл" << endl;
	cout << "3) Выход" << endl;
	cin >> key;
	switch(key)
	{
	case 1:
		obj.create();
		break;
	case 2:
		obj.print();
		break;
	case 3:
		exit(0);
	default: cout << "Неверная команда!" << endl;
		cin.get();
		obj.menu();
	}
}

void MIIT::create()
{
	system("cls");
	char filename[20];
	cout << "Введите имя файла: ";
	cin >> filename;
	ofstream fout;
	fout.open(filename);
	cout << "Введите кол-во записей: ";
	cin >> n;
	for(int i=0; i<n; i++)
	{
		cout << "Введите название института: ";
		cin >> sp[i].name_isnt;
		cout << "Введите номер корпуса: ";
		cin >> sp[i].num_korp;
		cout << "Введите название кафедры: ";
		cin >> sp[i].name_kaf;
		cout << "Введите телефон кафедры: ";
		cin >> sp[i].phone_kaf;
		cout << endl;
	}
	fout << "|# |Название института|Номер корпуса|Название кафедры|Телефон кафедры|" << endl;
	fout << "|==|==================|=============|================|===============|" << endl;
	if(!fout.is_open())
		cout << "Не удалось открыть файл!" << endl;
	else
		for(int i=0; i<n; i++)
			fout << i+1 << "  " << sp[i].name_isnt << "                   " << sp[i].num_korp << "             " << sp[i].phone_kaf << "               " << endl;
	fout.close();
	cin.get();
	system("cls");
	menu();
}

void MIIT::print()
{
	ifstream fin;
	system("cls");
	char filename[20];
	cout << "Введите имя файла: ";
	cin >> filename;
	fin.open(filename);
	if(!fin.is_open())
		cout << "Не удалось открыть файл" << endl;
	else
	{
			for(int i=0; i<n; i++)
			{
				fin >> sp[i].name_isnt;
				fin >> sp[i].num_korp;
				fin >> sp[i].name_kaf;
				fin >> sp[i].phone_kaf;
			}
		
	}
	cout << "|# |Название института|Номер корпуса|Название кафедры|Телефон кафедры|" << endl;
	cout << "|==|==================|=============|================|===============|" << endl;
	for(int i=0; i<n; i++)
		cout << i+1 << "  " << sp[i].name_isnt << "                   " << sp[i].num_korp << "             " << sp[i].phone_kaf << "               ";  
	fin.close();
	cin.get();
	cin.get();
	system("cls");
	menu();
}
_lev вне форума Ответить с цитированием
Старый 12.10.2014, 02:46   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А файл покажи.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.10.2014, 04:00   #3
_lev
Пользователь
 
Регистрация: 16.06.2014
Сообщений: 11
По умолчанию

файл создается в методе create(). в методе print() нужно открыть созданный файл для чтения
class.h
Код:
#ifndef CLASS_H
#define CLASS_H

// класс "Структура МИИТа"
class MIIT
{
public:
	void menu();
	void create();
	void print();
	// Структура класса
	struct spisok
	{
		char name_isnt[50];
		int num_korp;
		char name_kaf[100];
		int phone_kaf;
	};
private:
	spisok sp[50]; // объект класса
};


#endif
methods.h
Код:
#include "class.h"

#include <iostream>
#include <fstream>
using namespace std;
int n;
// Меню
void MIIT::menu()
{
	MIIT obj;
	int key;
	cout << "1) Создать файл" << endl;
	cout << "2) Открыть файл" << endl;
	cout << "3) Выход" << endl;
	cin >> key;
	switch(key)
	{
	case 1:
		obj.create();
		break;
	case 2:
		obj.print();
		break;
	case 3:
		exit(0);
	default: cout << "Неверная команда!" << endl;
		cin.get();
		obj.menu();
	}
}

void MIIT::create()
{
	system("cls");
	char filename[20];
	cout << "Введите имя файла: ";
	cin >> filename;
	ofstream fout;
	fout.open(filename);
	cout << "Введите кол-во записей: ";
	cin >> n;
	for(int i=0; i<n; i++)
	{
		cout << "Введите название института: ";
		cin >> sp[i].name_isnt;
		cout << "Введите номер корпуса: ";
		cin >> sp[i].num_korp;
		cout << "Введите название кафедры: ";
		cin >> sp[i].name_kaf;
		cout << "Введите телефон кафедры: ";
		cin >> sp[i].phone_kaf;
		cout << endl;
	}
	fout << "|# |Название института|Номер корпуса|Название кафедры|Телефон кафедры|" << endl;
	fout << "|==|==================|=============|================|===============|" << endl;
	if(!fout.is_open())
		cout << "Не удалось открыть файл!" << endl;
	else
		for(int i=0; i<n; i++)
			fout << i+1 << "  " << sp[i].name_isnt << "                   " << sp[i].num_korp
                               << "             " << sp[i].phone_kaf << "               " << endl;
	fout.close();
	cin.get();
	system("cls");
	menu();
}

void MIIT::print()
{
	ifstream fin;
	system("cls");
	char filename[20];
	cout << "Введите имя файла: ";
	cin >> filename;
	fin.open(filename);
	if(!fin.is_open())
		cout << "Не удалось открыть файл" << endl;
	else
	{
			for(int i=0; i<n; i++)
			{
				fin >> sp[i].name_isnt;
				fin >> sp[i].num_korp;
				fin >> sp[i].name_kaf;
				fin >> sp[i].phone_kaf;
			}
		
	}
	cout << "|# |Название института|Номер корпуса|Название кафедры|Телефон кафедры|" << endl;
	cout << "|==|==================|=============|================|===============|" << endl;
	for(int i=0; i<n; i++)
		cout << i+1 << "  " << sp[i].name_isnt << "                   " << sp[i].num_korp 
                       << "             " << sp[i].phone_kaf << "               ";  
	fin.close();
	cin.get();
	cin.get();
	system("cls");
	menu();
}
main.cpp
Код:
#include "methods.h"


///// Главная функция
int main()
{
	setlocale(LC_ALL, "rus"); 
	MIIT obj;
	
	obj.menu();

	system("pause");
	return 0;
}

Последний раз редактировалось Stilet; 12.10.2014 в 10:02.
_lev вне форума Ответить с цитированием
Старый 12.10.2014, 10:01   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю избавиться от лишнего жира:
Код:
void MIIT::print()
{
	ifstream fin;
	system("cls");
	char filename[20];
	string s;
	cout << "Введите имя файла: ";
	cin >> filename;
	fin.open(filename);
	if(!fin.is_open())
		cout << "Не удалось открыть файл" << endl;
	else
	{
        system("cls");
			while(!fin.eof())
			{
			    getline(fin,s);

			    cout<<s<<'\n';
			}

	}
	menu();
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.10.2014, 10:57   #5
_lev
Пользователь
 
Регистрация: 16.06.2014
Сообщений: 11
По умолчанию

спасибо, все неплохо, но теперь не записывает название кафедры в файл. и не выводит соотвественно
_lev вне форума Ответить с цитированием
Старый 12.10.2014, 11:29   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но теперь не записывает название кафедры
и не будет.
Смотри:
Цитата:
for(int i=0; i<n; i++)
fout << i+1 << " " << sp[i].name_isnt << " " << sp[i].num_korp
<< " " << sp[i].phone_kaf << " " << endl;
Нет у тебя здесь записи sp[i].name_kaf.
Дописывай код )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись и чтение структуры в/из файла Faltfromoss Общие вопросы C/C++ 2 23.07.2014 23:01
Чтение из файла, структуры -=M{a}LoY=- Общие вопросы C/C++ 9 09.10.2012 23:23
Чтение структуры из файла! Olegzxc Общие вопросы C/C++ 1 01.12.2011 00:40
Чтение структуры из файла atenon Общие вопросы C/C++ 11 22.10.2010 20:35
Чтение структуры файла SDK Помощь студентам 4 23.01.2008 19:30