2016-04-30 10 views
-1

2つの重要な注意点があるテキストファイルからリンクリストを作成する必要がある宿題があります。ループ内のファイルからテキストを読み込んでリンクリストを作成するC++

  1. ませ配列は

  2. ませベクトル

は本当に、私は、リンクリストの一部大丈夫理解していないが、私は私のプログラムのどこかに自分自身を失敗しているように見えます。多くの場合、これらの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; 
    } 

} 
+0

私はwhileループを作成することができます...より単純なadd関数にノードを渡し、そのノードをリストに追加しますか?それはより簡単に思える。 – CoffeeAndCream

答えて

0
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); 

} 

これは私が(INT MAINにあるコード())、それを固定する方法です。基本的には、Node * addにデータを転送し、それを通常のlinked_list add関数に渡します。私は参考にして渡します。誰かが以前にはうまくいかない理由を説明することはできますか?私はそれが "トラバース"の価値と関係していると思っています。どのように私はこれを修正することができますか?

ループ内でリンクリストを作成するときは、反復関数を使用してトラバースを渡したり、関数を反復したり、複雑なネストループシステムを使用したほうがよいでしょうか?

関連する問題