Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Очереди в c++

Ответить
Настройки темы
C/C++ - Очереди в c++

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите пожалуйста!
Почему числа не записывает в файл???

Вот код:

DS.h


#include <iostream>
#include <fstream>

template < typename G >
class QueueList
{
class ITEM
{
public:
G data;
ITEM *next, *prev;
ITEM( G &ref ) : next( NULL ), prev( NULL ), data( ref ) {}
~ITEM() {}
};
ITEM *head,*tail;
public:
QueueList() : head( NULL ), tail( NULL ){}
~QueueList()
{
clear();
}
bool empty()
{
//функція повертає істину, якщо черга немає жодного елемента
return head == NULL;
}
void PushTail( G &ref )
{
//функція додає новеий елемент після останнього
if( empty() )
head = tail = new ITEM( ref );
else
{
ITEM*P=new ITEM( ref );
tail -> next = P;
P -> prev = tail;
tail = P;
}
}
void PushHead( G &ref )
{
//функція додає новий елемент перед першим
if( empty() )
{
head = new ITEM( ref );
tail=head;
}
else
{
ITEM*P = new ITEM( ref );
head -> prev = P;
P -> next = head;
head=P;
}
}
void PopHead()
{
//функція вилучає перший елемент
head = head -> next;
}
void PopTail()
{
//функція вилучає останній елемент
tail = tail -> prev;
}
G& GetH()
{
//функція повертає посилання на іформаційне поле першого елементу
return head -> data;
}
G& GetT()
{
//функція повертає посилання на іформаційне поле останнього елементу
return tail -> data;
}
void clear()
{
//неявний деструктор класу
while( head )
{
ITEM *p = head;
head = head->next;
delete p;
}
tail = head;
}
void openf()
{
//функція читання черги з файлу
using namespace std;
fstream in( "input.txt", ios_base :: in | ios_base :: binary );
if( !in.is_open() )
throw "Cann't open file : input.bin";
if( in.eof() )
throw "File if empty";
char ch;
int buf;
while( !in.eof() )
{
in >> buf;
in >> ch;
PushTail( buf );
}
in.close();
}
void savef()
{
//функція запису черги в файл
using namespace std;
fstream out( "output.txt", ios_base :: in | ios_base :: binary );
if( !out.is_open() )
throw "Cann't create file";
ITEM *p = head;
do
{
out << p -> data;
if(p -> next == NULL)
out << '^';
p = p -> next;
}
while( p!= tail );
out.close();
}
};





// kurs.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include "DS.h"

#define QL QueueList


int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;
cout << "\n ***** HELLO! *****\n";
QL <int> list;
for(;
{
cout << "\n ***** What to do? *****\n"
<< "\n\n 1) PUSH element to HEAD of queue;"
<< "\n\n 2) PUSH element to TAIL of queue;"
<< "\n\n 3) POP element from HEAD of queue;"
<< "\n\n 4) POP element from TAIL of queue;"
<< "\n\n 5) Set HEAD;"
<< "\n\n 6) Set TAIL;"
<< "\n\n 7) Save queue;"
<< "\n\n 8) Open queue;"
<< "\n\n 9) Exit;\n"
<< "\n---->";
int ch;
cin >> ch;
if( ch > 9 || ch < 1 )
{
cout << "Wrong number"
<< "---->";
cin >> ch;
}
if( ch == 1 )
{
cout << "\n ****ENTER DATA*****\n"
<< "---->";
int buf;
cin >> buf;
list.PushHead( buf );
}
if( ch == 2 )
{
cout << "\n ****ENTER DATA*****\n"
<< "---->";
int buf;
cin >> buf;
list.PushTail( buf );
}
if( ch == 3 )
{
list.PopHead();
cout << "DONED*****\n";
}
if( ch == 4 )
{
list.PopTail();
cout << "\nDONED*****\n";
}
if( ch == 5 )
{
cout << "\n ****ENTER DATA*****\n"
<< "---->";
cin >> list.GetH();
}
if( ch == 6 )
{
cout << "\n ****ENTER DATA*****\n"
<< "---->";
cin >> list.GetT();
}
if ( ch == 7)
{
list.savef();
cout << " \n Queue was saved in file \\output.txt \n ";
}
if ( ch == 8 )
{
list.openf();
cout << "\n File was opend succesfuly";
}
}
return 0;
}

Отправлено: 21:06, 26-04-2012

 

Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
fstream out( "output.txt", ios_base :: in | ios_base :: binary );
Может быть вместо этого нужно так:

Код: Выделить весь код
fstream out( "output.txt", ios_base :: out | ios_base :: binary );
in это ввод, а out соответственно вывод. Вы же при выводе указываете ввод.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:45, 28-04-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Очереди в c++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Система электронной очереди Delirium Прочее железо 3 24-04-2012 00:51
V. 5.5/2000/2003 - письмо висит в очереди Сет Microsoft Exchange Server 3 14-11-2008 10:36
WINS/Browse - Вылетают по очереди! zalg Сетевые технологии 3 20-02-2008 17:40
Мониторинг очереди печати. kallioma Microsoft Windows NT/2000/2003 2 02-04-2007 14:39
вылет процессов по очереди lightangel Microsoft Windows 95/98/Me (архив) 14 08-12-2003 11:55




 
Переход