2つの重要な注意点があるテキストファイルからリンクリストを作成する必要がある宿題があります。ループ内のファイルからテキストを読み込んでリンクリストを作成するC++
ませ配列は
ませベクトル
は本当に、私は、リンクリストの一部大丈夫理解していないが、私は私のプログラムのどこかに自分自身を失敗しているように見えます。多くの場合、これらのERRORコードは、横断→次のノードにアクセスできないようになっています。私はリンクされたリストをたどるために、トラバース→次のノードをチェックすることがよくあります。
現在、エラーコードはありません。リンクされたリストにcout文があり、トラバースノードがテキストファイルの出力と同じ(少なくとも1点)であることがわかります。 whileループ内に正しい情報が表示されますが、印刷すると情報が消えます。
私の最高の推測は、自分のプログラムが私のリストに正しくリンクされていないことです。しかし、そうであれば、私はそれらを適切にリンクする方法を理解することができませんでした。
誰かが私にこのことに関するヒントやアドバイスをくれますか?これは実際に代入の最初の部分(したがって "InitList()"関数名)ですが、私はそれを動作させるのに苦労しています。
#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;
}
}
私はwhileループを作成することができます...より単純なadd関数にノードを渡し、そのノードをリストに追加しますか?それはより簡単に思える。 – CoffeeAndCream