2017-07-10 15 views
0

ファイルからリンクリストへの読み込みに問題があります。ファイルを読み込んでリンクされたリストに各ノードを読み込む(おそらく非常に非効率な方法ですが)、1行以上を印刷してみると、印刷すると無限ループに陥ります。リンクされたリストをテキストファイルから読み込む際の無限ループ

負荷コード

void readFile() 
{ 
    string text; 
    string temp; // Added this line 
    node* newNode = new node; 

    ifstream file; 
    file.open("example.txt"); 

    for (int i = 0; i < 1; i++) 
    { 
     getline(file, temp); 
     text = temp; 

     string input = text; 
     istringstream ss(input); 
     string token; 

     int counter = 0; 

     while (getline(ss, token, ',')) 
     { 
      cout << token << '\n'; 
      newNode->rented = token; 
      counter++; 

      if (counter == 0) 
      { 
       newNode->rented = token; 
      } 
      else if (counter == 1) 
      { 
       std::istringstream ss(token); 
       ss >> newNode->maxload; 
      } 
      else if (counter == 2) 
      { 
       std::istringstream ss(token); 
       ss >> newNode->passengers; 
      } 
      else if (counter == 3) 
      { 
       std::istringstream ss(token); 
       ss >> newNode->doors; 
      } 
      else if (counter == 4) 
      { 
       newNode->registration = token; 
      } 
      else if (counter == 5) 
      { 
       std::istringstream ss(token); 
       ss >> newNode->engine; 
      } 
      else if (counter == 6) 
      { 
       newNode->model = token; 
      } 
      else if (counter == 7) 
      { 
       newNode->make = token; 
      } 
     } 
     system("pause"); 
     list.insertNode(newNode); 
    } 
    file.close(); 
} 

挿入ノード

void linkedList::insertNode(node* newNode) 
{ 
    newNode->nextNode = head; 
    head = newNode; 
} 

プリントコード

void linkedList::displayList() 
{ 

    node* thisNode = head; 

    if (head == NULL) 
    { 
     cout << "The list is empty\n"; 
     return; 
    } 
    else 
     cout << "---------------------------------------------------------\n"; 
     cout << "\tMake\tReg Number\tRented\n"; 
     cout << "---------------------------------------------------------\n"; 
     cout << "\t"; 


    do 
    { 
     cout << setw(8) << left << thisNode->make; 
     cout << setw(16) << left << thisNode->registration; 
     cout << setw(10) << left << thisNode->rented; 
     cout << "\n\t"; 
     thisNode = thisNode->nextNode; 

    } while (thisNode != NULL); 
    { 
     cout << "\n\n"; 
    } 
} 

私は、1以上のものを反復するループのために設定があれば

0 aa true 

:私はちょうど1イテレーションに負荷コードでループのために設定した場合、テキストファイル

car,Ferarri,12.0,aa,3,1,0,true 
car,Mercedes,12.0,bb,5,4,0,false 
car,Ford,1.6,cc,5,4,0,false 

それが正しい表示を出力します印刷コードは、最後に読み込んだ行が何であっても無限に印刷します(その前の行はすべて無視します)。

0 bb false 
0 bb false 
0 bb false 
... 

これはなぜこのような理由がありますか?

+0

この例では 'next node'クラスがありません。私の推測では、 'newNode-> nextNode'をNULLで初期化するのを忘れてしまったということです。 – Serge

答えて

2

ただ1つのノードを割り当てているだけです。 forループの先頭に次の行を移動:

node* newNode = new node; 

そうしないと、ノード毎回のすべてを上書きして、あなたのリストにそれを繰り返し追加し、循環参照を作成します。

+0

完全に働いた。感謝万円! – GuestUser140561

関連する問題