Как загрузить связанный список из текстового файла? - PullRequest
1 голос
/ 08 февраля 2012

Привет Я работал над домашней работой, в которой я должен создать программу со связанным списком, которая может сохранять и восстанавливать свои данные из текстового файла. Я получил большую часть его работы, но у меня есть некоторые проблемы с восстановлением связанного списка, используя данные из текстового файла, который был создан из него. Когда я его восстанавливаю, последний элемент повторяется дважды. Я полагаю, что это как-то связано с циклом, но я не уверен, что включаю весь объем своего задания.

Ниже приведен код программы, которую я написал до сих пор:

ListNode.h

#pragma once
template<class T> class List;
template<class T>

class ListNode
{
 friend class List<T>;
public:
 ListNode(const T&);
 T getData()const;
private:
 T data;
 ListNode<T>*next;
};//end ListNode class

template<class T>
ListNode<T>::ListNode( const T &info):data(info), next(NULL)
{
}//end default constructor
template<class T>
T ListNode<T>::getData()const
{
 return data;
}//end function getData 

list.h

#pragma once
#include<iostream>
#include <fstream>
using namespace :: std;
#include "ListNode.h"
template<class T> 
class List 
{
private:
 ListNode<T> *head;
 int size;
 ListNode<T> *find(int index) const;
public:
 List();
 List(const List<T> &aList);
 ~List();
 int getLength() const;
 void insert (int index, T tempData);
 void remove(int index);
 void retrieve(int index, T &tempData);
 bool isEmpty() const;
 void print() const;
 void save();
 void restore();
};//end List class 

Сломанная функция:

template <class T>
void List<T>::restore()
 {
     ifstream inFile;
     inFile.open("listFile.txt");

     T value=0;
     int index, check =0;

     cout << "Now reading the data from the text file..." << endl;
         //inFile >> value;
         //cout << "Value is : " << value << endl;


        while (inFile != NULL) 
        {
            inFile >> value;
            index = getLength();
            cout << value << endl;
            insert(index+1, value);

            inFile.close();

        } 


 } // end function restore

Данные связанного списка, которые были сохранены в текстовом файле во время теста, были:

35
45
55
65

Когда связанный список был восстановлен из текстового файла, это было его содержание:

35
45
55
65
65

Как я могу решить эту проблему?

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

Меня удивляет, что ваша функция restore работает вообще. Но да, это повторяет последний элемент. Попробуйте вместо этого:

while(inFile >> value)
  ...

EDIT:
Хорошо, просто попробуй так много:

while(inFile >> value)
{
  cout << value << endl;
}

Правильно ли отображаются значения?

0 голосов
/ 03 апреля 2016

Кто возглавляет ваш список? Вы можете использовать цикл while или даже оператор if для прохождения через каждый узел и загрузки их всех.

0 голосов
/ 11 апреля 2014

У меня была эта проблема некоторое время назад с одной из моих программ. Мне потребовалось некоторое время, чтобы понять, и я не уверен, что это та же проблема, но проверьте ваш входной файл еще раз. Если вы оставите дополнительную строку после последнего числа, компилятор вернет последнее число дважды.

пример:

1

2

3

4

5

(дополнительная строка)

Просто удалите лишнюю строку.

...