C++ 如何从文本文件加载链接列表?
问候我一直在做一个家庭作业,我必须创建一个链表程序,它可以保存和恢复文本文件中的数据。我已经让它的大部分工作,但我有一些问题,恢复链表使用的数据从文本文件中创建的。当我恢复它时,最后一个元素会重复两次。我相信这与循环有关,但我不确定我是否包括了我的整个任务范围 以下是我迄今为止编写的程序代码: ListNode.hC++ 如何从文本文件加载链接列表?,c++,loops,linked-list,C++,Loops,Linked List,问候我一直在做一个家庭作业,我必须创建一个链表程序,它可以保存和恢复文本文件中的数据。我已经让它的大部分工作,但我有一些问题,恢复链表使用的数据从文本文件中创建的。当我恢复它时,最后一个元素会重复两次。我相信这与循环有关,但我不确定我是否包括了我的整个任务范围 以下是我迄今为止编写的程序代码: ListNode.h #pragma once template<class T> class List; template<class T> class ListNode {
#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
从文本文件还原链表时,这是其内容:
35
45
55
65
65
我该如何解决这个问题?您的恢复功能居然能正常工作,这让我感到惊讶。但是是的,它重复了最后一个元素。请尝试以下方法:
while(inFile >> value)
...
编辑:
好吧,试一下:
while(inFile >> value)
{
cout << value << endl;
}
它是否正确显示值?不久前,我的一个程序出现了这个问题。我花了一段时间才弄明白,我不确定这是否是同一个问题,但请再次检查您的输入文件。如果在最后一个数字后留下一行,编译器将返回最后一个数字两次 例如: 一, 二, 三, 四, 五, 额外线路
只需删除多余的一行 哪一个是你名单上的头号人物?您可以使用while循环甚至if语句遍历每个节点并全部加载它们。哇,代码太多了。和/或请不要在这样的问题中转储整个代码。只发布相关的位。像这样的代码转储不值得阅读。您知道如何使用调试器吗?如果是这样,您应该使用它来了解问题。如果不是,你应该真正了解这一点。这是程序员必备的工具。可能重复我注意到你正在关闭read-in循环中的文件句柄,你应该修复它。将代码更改为建议的代码,现在只恢复这个:45,65?!它现在起作用了。删除infle>>值;解决了这个问题。谢谢
35
45
55
65
65
while(inFile >> value)
...
while(inFile >> value)
{
cout << value << endl;
}