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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2012, 15:09   #1
droed.nk
 
Регистрация: 24.10.2011
Сообщений: 3
Вопрос Очередь в С++

Итак, задача-сформировать бинарный файл, в который вписать энное количество целых чисел, потом из этого же бинарника создать очередь, после чего спрашивать у пользователя, что с ней делать-добавить элемент (данные ввести), удалить элемент, вывести всю очередь. Трассировка крашится на указанном месте (смотреть код). Кто-нибудь сможет указать на ошибку? Скорее всего, запутался где-то при считывании с файла.
Код:
//функция формирвоания файла
//функция формирования очереди
//функции для обработки событий

#include <iostream>
#include <fstream>
using namespace std;

//формируем файл
void FormFile(fstream &finout)
{
	int data;
	finout.open("file.dat", ios::out | ios::binary);
	cout<<"введите элементы для записи в файл. 123 для прекращения"<<endl;
	do {
		cin>>data;
		finout.write((char *) &data, sizeof(data));
	} while (data!=123);
	cout<<"формирование файла завершено"<<endl;
	finout.close();
}
//сама очередь
struct Elem
{
	int data;
	Elem* next;
	Elem* last;
};
typedef Elem* PNode;

void Ins_end ( PNode &last)
{
	int x;
	cout<<"введите элемент для добавления в очередь"<<endl;
	cin>>x;
	PNode p;
	p = new Elem;
	p -> data = x;
	p -> next = NULL;
	last -> next = p;
	last = p;
}

void Del_beg ( PNode & first )
{
	PNode p;
	if (first != NULL) 
	{
		p = first -> next;		//указатель на второй элемент
		delete first;		//освобождение памяти
		first = p;
	}
}

void Out_q(PNode &first, PNode &last)
{
	PNode ptr = NULL;                       
	if (first == NULL)
	{
			cout<<"очередь пуста"<<endl;
	}
	cout<<"очередь"<<endl;
	ptr = first;
	while (ptr->last != NULL)
	{
			cout<<ptr->data<<" ";
			if (ptr->last == NULL)
					break;
			ptr = ptr->last; //!!! ошибка тут
	}
}
//формируем очередь
void FormQ(fstream &finout)
{
	PNode p, first, last, next;
	int x;
	first = NULL;		
	last = NULL;
	finout.open("file.dat", ios::in | ios::binary);
	if (finout.eof())
		{
			finout.clear();
			finout.seekg(0);	
		}
	finout.read((char*)&x, sizeof(x));	//чтение из файла значения элемента
	p = new Elem;
	p -> data = x;
	p -> next = NULL;
	first = p;
	last = p;
	next = p;
	cout<<"первый элемент очереди сформирован"<<endl;
	while (!finout.eof())
	{
		finout.read((char*)&x, sizeof(x));
		p = new Elem;
		p -> data = x;
		p -> next = next;
		p -> last = NULL;
		last -> next = p;
		last = p;
	}
	cout<<"команды: + добавить элемент, - удалить элемент, = вывести очередь"<<endl;
	char comm;
	do {
		cout<<"введите команду"<<endl;
		cin>>comm;
		if (comm == '+') Ins_end(last);
		if (comm == '-') Del_beg(first);
		if (comm == '=') Out_q(first, last);
	} while (comm=='*');
	finout.close();
}

void main()
{
	setlocale(LC_ALL, "russian");
	fstream finout;
	FormFile(finout);
	FormQ(finout);
}
droed.nk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очередь в СИ Savelia Помощь студентам 4 12.06.2011 14:56
Очередь shelovek Помощь студентам 0 31.10.2010 14:15
Очередь Си savra Помощь студентам 1 22.04.2010 18:48
Очередь Юлькин Общие вопросы C/C++ 4 30.05.2009 16:00
очередь odi_noki Общие вопросы Delphi 3 24.10.2008 12:09