V
vnmukh
Доброго времени суток. Есть программа, создает односвязный список, записывает его в файл, затем читает его из того же файла с последующим вывдом на экран. Создает список и записывает нормально, а вот при считывании вылетает ошибка. Подскажите пожалуйста что не так, заранее спасибо.
P.S. За код строго не судите я не волшебник, я только учусь
C++:
#include <iostream>
using namespace std;
struct Node
{
public:
int value;
int NodeNumber;
Node *Next;
};
class List
{
public:
List();
void Add();
void Add(int val);
void Del();
void ShowAll();
int Save();
int Import();
private:
Node *Top;
int count;
};
List::List()
{
Top = NULL;
}
//вводим с клавиатуры значение поля структуры, добавляем новый узел
void List::Add()
{
int a;
cout << "\nââåäèòå çíà÷åíèå: ";
cin >> a;
Node *pNode = new Node;
pNode->NodeNumber = count;
pNode->value = a;
if(!Top)
{
Top = pNode;
}
else
{
Node *temp = Top;
while (temp->Next) temp=temp->Next;
temp->Next = pNode;
}
}
//тоже добавляем новый узел, только значение поля структуры задается входным параметром
void List::Add(int val)
{
Node *pNode = new Node;
pNode->NodeNumber = count;
pNode->value = val;
if(!Top)
{
Top = pNode;
}
else
{
Node *temp = Top;
while (temp->Next) temp=temp->Next;
temp->Next = pNode;
}
}
//сохраняем список в бинарный файл
int List::Save()
{
Node *current = Top;
FILE *pf = NULL;
pf = fopen("Base", "wb");
if(pf == NULL)
{
cout << "Îøòáêà ôàéëà";
return 0;
}
while(current)
{
fwrite(&(current->value), sizeof(int), 1, pf);
current = current->Next;
}
fclose(pf);
}
//загружаем структуру из бинарного файла
int List::Import()
{
Node *current = Top;
FILE *pf = NULL;
count = 0;
int val;
pf = fopen("Base", "rb");
if(pf == NULL)
{
cout << "Îøèáêà ôàéëà";
return 0;
}
fread(&val, sizeof(int), 1, pf);
while(!feof(pf))
{
cout << " " << val;// в принципе файл открывается, даже выводит значения на экран
Add(val); // но при попытке создать список этим методом вылетает
fread(&val, sizeof(int), 1, pf);
}
fclose(pf);
}
int menu();
int main()
{
SetConsoleOutputCP(1251);
List l;
bool exit = false;
for(;;)
{
int choice = menu();
switch(choice)
{
case 1:
l.Add();
break;
case 2:
l.ShowAll();
break;
case 3:
l.Del();
break;
case 4:
l.Save();
break;
case 5:
l.Import();
break;
case 6:
exit=true;
break;
default:
cout << "Íåïðàâèëüíûé ââîä";
break;
}
if(exit) break;
}
return 0;
}
int menu()
{
int a;
cout << "\n******ÌÅÍÞ*******";
cout << "\n(1)Äîáàâèòü";
cout << "\n(2)Ïîêàçàòü âñå";
cout << "\n(3)Óäàëèòü";
cout << "\n(4)Ñîõðàíèòü";
cout << "\n(5)Èìïîðòèðîâàòü";
cout << "\n(6)Âûõîä";
cin >> a;
return a;
}
P.S. За код строго не судите я не волшебник, я только учусь