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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2014, 00:09   #1
Ladis
 
Регистрация: 13.09.2013
Сообщений: 6
По умолчанию бесконечный цикл при чтении из файла

Код:
#include <iostream>
#include <string>
#include <fstream>
#include <locale.h>
using namespace std;

int kol[10];
int cl = 0;


class name
{
private:
	string _name;
	string fam;
	string surname;
	int number;
public:
	name();
	~name(){};
	friend ostream &operator<<(ostream &, const name);
	friend istream &operator>>(istream &, name &);
	void filein(ofstream &, ifstream &, name );
	void filein_end(ofstream &, ifstream &, name );
	void fileout(ifstream &, name );

};


name::name()
{
	_name = "";
	fam = "";
	surname = "";
	number = 0;
}

ostream &operator<<(ostream &out, const name obj)
{
	out<<"Имя: "<<obj._name<<endl<<"Фамилия: "<<obj.fam<<endl<<"Отчество: "<<obj.surname<<endl<<"Номер: "<<obj.number<<endl;
	return out;
}

istream &operator>>(istream &in, name &obj)
{
	  cout<<"Имя: ";
      in>>obj._name;
      cout<<endl<<"Фамилия: ";
	  in>>obj.fam;
	  cout<<endl<<endl<<"Отчество: ";
	  in>>obj.surname;
	  cout<<endl<<"Номер: ";
      in>>obj.number;
	  return in;
	}

void name::filein(ofstream &ofs,ifstream &ifs, name nam)
{
	cout<<"Введите номер записи,после которой необходимо добавить новую: "<<endl;
		int j;
		cin>>j;
		if(j <= 0 || j >= cl)
		{
			cerr<<"Неверный номер записи - завершение!"<<endl;
			exit(1);
		}
		ofstream od;
		ifstream op;
		op.open("myfile.txt");
		od.open("myfile.txt");
		ifs.seekg(kol[j]);
		int o;
		while(!ifs.eof())
		{
			ifs>>nam;
			ofs<<nam<<endl;
			o = ifs.tellg();
			if(o == kol[cl] - 2)
				break;
		}
		int v = od.tellp();
		ofs.seekp(kol[j]);
		cin>>nam;
		ofs<<nam;
		int t = ofs.tellp();
	    while(!op.eof())
		{
			int r=ofs.tellp();
			if(r-t == v)
				break;
			op>>nam;
			ofs<<nam<<endl;
		}
	}


int k=1;

void name::filein_end(ofstream &ofstr, ifstream &ifstr, name nam)
{
	kol[k]=ofstr.tellp();
	k++;
	cl++;
	ifstr.seekg(0,ios_base::end);
	cout<<"Ввод данных: "<<endl;
	cin>>nam;
	ofstr<<nam<<endl;
}

void name::fileout(ifstream &ifstr, name nam)
{
	for(int i = 1;i <= cl+1;i++)
	{
		cout<<kol[i]<<endl;
	}
	cout<<"Введите номер записи,которую необходимо считать из файла: "<<endl;
	int n;
	while(!(cin>>n))
	{
		cin.clear();
		while(cin.get() !='\n')
			continue;
		cout<<"Ошибка!Введите число ";
	}
	if(n < 0 || n > cl)
	{
		cerr<<"Ошибка!Вы ввели номер записи,которой не существует!"<<endl;
		exit(1);
	}
	ifstr.seekg(kol[n-1]);
	int x=ifstr.tellg();
    while(!ifstr.eof())
	{
		cout<<nam<<endl;
		x=ifstr.tellg();
		if(x == kol[n]-2)
			break;
	}
}

int main()
{
	setlocale(LC_ALL,"Russian");
	name obj;
	ifstream _if;
	ofstream _of;
	_of.open("myfile.txt");
	_if.open("myfile.txt");
	int k;
	cout<<"Введите количество работников: "<<endl;
	while(!(cin>>k))
	{
		cin.clear();
		while(cin.get() !='\n')
			continue;
		cout<<"Ошибка!Введите число ";
	}		
	for(int i = 0;i < k;i++)
	{
			obj.filein_end(_of, _if, obj);
	}
	obj.fileout(_if, obj); //при срабатывании этой функции идёт бесконечный цикл
	obj.filein(_of, _if, obj);
	obj.fileout(_if, obj);
	_if.close();
	_of.close();
	system("pause");

}
должен быть класс-контейнер, класс-итератор, (+ класс алгоритмов)
Задание: Создайте класс name, включающий в себя данные (имя, фамилия, отчество и номер работника). Создайте методы этого класса, осуществляющие файловый ввод/вывод данных указанного класса (с использованием ofstream и ifstream). Используйте форматирование данных (операторы << и >>). Функции чтения и записи должны быть независимыми: в них необходимо внести выражения для открытия соответствующего потока, а также чтения и записи. Функция записи может как добавлять записи в конец файла, так и в середину, после записи, соответствующей выбранному условию. Функции чтения потребуется некоторое условие выборки.

Последний раз редактировалось Ladis; 22.04.2014 в 00:39.
Ladis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бесконечный цикл при сет интервале Newpitbull JavaScript, Ajax 1 01.05.2013 16:47
Бесконечный цикл при заходе на метку. Как обойти? The Real Kos Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 24.09.2012 11:02
Кодировка при чтении из файла _-Re@l-_ Общие вопросы .NET 2 21.11.2010 20:12
ошибка при чтении файла ongleb Общие вопросы C/C++ 17 30.07.2009 13:48
Ошибка при чтении БД из файла!! sting БД в Delphi 4 14.12.2008 22:23