C++ 通过从循环C+中的文件中读取文本来创建链接列表+;
我有一个家庭作业,要求我从文本文件中创建一个链表,其中有两个重要的注意事项C++ 通过从循环C+中的文件中读取文本来创建链接列表+;,c++,file,text,linked-list,C++,File,Text,Linked List,我有一个家庭作业,要求我从文本文件中创建一个链表,其中有两个重要的注意事项 无阵列 无载体 真的,我对链表有一些很好的理解,但在我的程序中,我似乎有点不及格。通常,我会收到这些错误代码,比如无法访问traverse->next节点。我经常检查遍历->下一个节点,以便遍历我的链接列表 现在,我没有收到任何错误代码。在我的链接列表中有一个cout语句,它告诉我遍历节点至少(至少有一点)等于我的文本文件的输出。它在while循环中显示正确的信息,但当我打印它时。。。。信息消失了 我最好的猜测是我的程序
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
struct Node
{
string fName;
string lName;
double hours;
double pay;
int unionCode;
int id;
Node *next;
}; Node *head = nullptr;
//standard node struct with a global root node so I don't have to pass it everytime
void InitList();
void AddRecord();
void PrintList();
//prototypes
int main()
{
InitList();
PrintList();
int options;
cout << "MENU\n" <<
"______________________________\n" <<
"1: Add a Record\n" <<
"2: Modify a Record\n" <<
"3: Display a Record\n" <<
"4: Display a Summary\n" <<
"5: Display File\n" <<
"6: Exit Program\n" << endl;
cin >> options;
switch (options)
{
case 1:
AddRecord();
break;
default:
break;
}
}
void AddRecord()
{
fstream file;
file.open("PATH.txt", ios::app);
file.close();
}
void InitList()
{
//initializes the linked list from here on out, all changes made are
//reflected on the list
//and the text doc until the program quits
fstream file;
file.open("PATH.txt");
Node *add;
Node *traverse = head; //set traverse pointing to head
while (file.good()) //I realize this isn't ideal, but it's temporary to get it working
{
add = new Node;
file >> add->fName
>> add->lName
>> add->id
>> add->pay
>> add->hours
>> add->unionCode;
add->next = nullptr;
if (traverse)
{
while (traverse->next)
{
traverse = traverse->next;
}
traverse->next = add;
cout << traverse->fName << endl;
}
else
{
head = add;
cout << head->fName << endl;
}
}
file.close();
}
//simple Printing function... this is that part that's printing out ONLY the head value and nothing else (hence my assumption that head isn't linked)
void PrintList()
{
Node *traverse = head;
while (traverse->next)
{
cout << traverse->fName << " " << traverse->lName << " " << traverse->id << " $" << traverse->pay << " " << traverse->hours << " " << traverse->unionCode << endl;
traverse = traverse->next;
}
}
#包括
#包括
#包括
使用名称空间std;
结构体类型
{
字符串fName;
字符串名称;
双倍小时;
双薪;
国际统一代码;
int-id;
节点*下一步;
}; 节点*head=nullptr;
//具有全局根节点的标准节点结构,因此我不必每次都传递它
void InitList();
void AddRecord();
作废打印列表();
//原型
int main()
{
InitList();
打印列表();
int选项;
无法>添加->标识
>>添加->支付
>>添加->小时数
>>添加->工会代码;
添加->下一步=nullptr;
如果(遍历)
{
while(遍历->下一步)
{
遍历=遍历->下一步;
}
遍历->下一步=添加;
cout fName
这就是我修复它的方法(代码位于INT MAIN()中)。基本上,我将数据传输到Node*add,然后将其传递给一个普通的链表add函数。我通过引用传递它。有人能解释为什么它以前不工作吗?我猜这与“遍历”的值没有重置为“头”有关我已经习惯了,不然我怎么能把它修好呢
在循环中创建链表时,最好使用迭代函数并传递遍历、像我那样迭代函数,还是像我失败的那样使用复杂的嵌套循环系统?第二步……我可以创建一个while循环……将节点传递给更简单的add函数,然后将节点添加到列表中?这似乎更简单。
while (file.good())
{
Node *add = new Node;
file >> add->fName >> add->lName >> add->id >> add->pay >> add->hours >> add->unionCode;
add->next = nullptr;
InitList(add);
}