Добрый день, в функции Show я считываю из файл ОЛС, который был записан в функции Add. В функции check просто узнаю размер этого ОЛС. Но дальше мне надо повторно вывести ОЛС, но выводятся почему-то только последний элемент Count-раз
Код:
#include <conio.h>
#include <iostream>
#include<fstream>
using namespace std;
typedef double TE;
struct element //Структура с инфополями и адресным полем
{
TE x; //Инфополе. значения из x будут передаваться в список
element* Next; //Адресное поле
};
struct List {
element* Head; //Указатель на последний активный элемент или просто голова списка
public:
List() { Head = NULL; } //Конструктор и инициализация указателя пустым значением //Прототип деструктора. Сам деструктор вынесен за класс
void Add(TE x, int N); //Прототип функции добавления значений в список
void Show(TE& x); //Прототип функцииотображения списка на экране
void check(int& count);
};
void List::Add(TE x, int N) //Функция добавления элементов в список
{
cout << "Write the name of your file " << endl;
string path;
cin >> path;
fstream file;
file.open(path, fstream::in | fstream::out | fstream::app);
List lst; //Переменная, тип которой список
cout << "N = ";
cin >> N;
for (int i = 0; i < N; i++)
{
element* temp = new element; //При каждом вызове выделяется память
temp->x = x; //Записываем x в элемент структуры element (в x структуры element) //Указываем, что след. элемент это объект по адресу Head
Head = temp;
cout << i + 1 << ". x = ";
cin >> x;
file << x;
file << " ";
}
file.clear();
file.seekg(0, ios_base::beg);
}
void List::check(int& count)
{
cout << "Write the name of your file " << endl;
string path;
cin >> path;
fstream file;
file.open(path, fstream::in | fstream::out | fstream::app);
file.clear();
file.seekg(0, ios_base::beg);
List lst; //Переменная, тип которой список
element* temp = Head;
int num;
count = -1;
while (!file.eof())
{
file >> num;
count++;;
}
if (count == 0)
{
cout << " your linked list have no numbers " << endl;
}
else if (count > 0)
{
cout << "The amount of numbers in the linked list is " << count << endl;
}
}
void List::Show(TE& x) //Функция отображения списка на экране
{
cout << "Write the name of your file " << endl;
string path;
cin >> path;
fstream file;
file.open(path, fstream::in | fstream::out | fstream::app);
file.clear();
file.seekg(0, ios_base::beg);
List lst; //Переменная, тип которой список
int num;
int count = -1;
while (!file.eof())
{
file >> num;
count++;;
}
if (count == 0)
{
cout << " your linked list have no numbers " << endl;
}
else if (count > 0)
{
cout << "your linked list: ";
file.clear();
file.seekg(0, ios_base::beg);
element* temp = new element;
for (int i = 0; i < count; i++)
{
file >> x;
temp->x = x;
cout << temp->x << " ";
}
for (int i = 0; i < count; i++)
{
element* temp2 = new element;
temp2->x = x;
cout << temp2->x << " ";
temp2 = temp2->Next;
}
}
}
int main()
{
cout << "Write 1 to write your linked list " << endl;
cout << "Write 2 to see your linked list " << endl;
cout << "write 3 to check the amount of elements in your linked list " << endl;
TE x = 0;
int b = 0;
cin >> b;
int N = 0;
List lst;
if (b == 1)
{
lst.Add(x, N);
}
else if (b == 2)
{
lst.Show(x);
}
else if (b == 3)
{
int count = -1;
lst.check(count);
return main();
}