如何从文本文件加载链接列表
How to load a linked list from a text file?
问候我一直在做一个家庭作业,在这个作业中,我必须创建一个链表程序,该程序可以从文本文件中保存和恢复数据。我已经完成了大部分工作,但我在使用从中创建的文本文件中的数据恢复链表时遇到了一些问题。当我恢复它时,最后一个元素会重复两次。我相信这与循环有关,但由于我不确定我是否包括了我任务的整个范围。
以下是我迄今为止编写的程序代码:
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
我该如何解决这个问题?
让我惊讶的是,您的restore
函数竟然能工作。但是的,它在重复最后一个元素。试试这个:
while(inFile >> value)
...
编辑:
好吧,试试这个:
while(inFile >> value)
{
cout << value << endl;
}
它是否正确显示值?
我的一个程序不久前遇到了这个问题。我花了一段时间才弄清楚,我不确定是否是同样的问题,但请再次检查您的输入文件。如果在最后一个数字后面多留一行,编译器将两次返回最后一个数值。
示例:
1
2
3
4
5
(额外线路)
只需删除多余的一行。
哪一个是您列表的头?您可以使用while循环,甚至if语句遍历每个节点并加载所有节点。
相关文章:
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 共享对象、符号、C/C++ 库链接和加载
- Assimp模型加载库安装/链接故障
- 我可以加载与库静态链接的 dll 吗?
- 从文本文件加载链表并打印时无限循环
- C 链接器错误尝试包含Tiny OBJ加载程序标头文件
- 动态加载库和运行时误解的显式链接
- 当使用“空dllmain”的dll加载链接到DLL时,应用程序无法启动(0xc0000142)
- 使用 cmake 的不同链接和加载库路径
- 链接链接器/加载器错误时"undefined reference to ..."与拉斯皮康库链接时
- 尽管存在符号链接,但 ld 无法加载库
- 在C/C (JIT)中,在运行时加载并链接OBJ文件
- VS 2010 Qt 加载项中的链接错误
- SDL加载项库未正确链接
- 我们可以在链接期间加载动态库吗
- 为什么 Unity 在与 OpenCV 链接时无法加载安卓原生库
- 加载动态链接库的第三种方法?大头针
- 如何在 Windows 上使用 Visual C++强制加载链接库
- 如何从文本文件加载链接列表
- 比较交换原子操作vs加载链接/存储条件操作