2014-02-28 32 views
0

我一直在尝试从我的链表中的第一个节点检索数据很长时间了。原谅我,但我仍然是新来的C++,特别是指针和链表。基本的C++链接列表节点和指针探测器

这里是我如何读从我的文本文件中的数据(工作正常到目前为止)

void readFile(ifstream& budgetFile, budgetItem *newNode, int& counter, budgetItem *temp, budgetItem *header) 
{ 
char pauseChar; 

int ctype; 
string cname; 
double camount; 
char cleared; 

itemPtr listTop = NULL; 

while (!budgetFile.eof()) 
{ 

    //newNode = new budgetItem; 

    budgetFile >> ctype >> cname >> camount >> cleared; 

    newNode->theType = ctype; 
    cout << newNode->theType << endl; 
    //cout << ctype << endl; 
    newNode->name = cname; 
    cout << newNode->name << endl; 
    newNode->amount = camount; 
    cout << newNode->amount << endl; 
    if (cleared == 'Y') { 
     newNode->cleared = true; 
    } 
    else{ 
     newNode->cleared = false; 
    } 

    newNode->next = listTop; 
    listTop = newNode; 

    if (counter == 0) 
    { 
     header = newNode; 
    } 

    counter++; 
} 

return; 
} 

这里是我正在试图找回从第一节点开始的数据。它根本不起作用。任何帮助,将不胜感激。

void showBudget (budgetItem *newNode, budgetItem *temp, budgetItem *header) 
{ 
double incomeTotal; 
double expenseTotal; 
double differenceTotal; 

//itemPtr *newlist; 
//newNode = header; 
itemPtr listTop; 

budgetItem *here = listTop; 

do { 
    cout << "INCOME:" << endl; 
    cout << "  Item    Amount  Cleared" << endl; 
    cout << "  ---------------- -------  -------" << endl; 
    if (newNode == NULL) 
    { 
     cout << "List is empty." << endl; 
    } 
    else 
    { 
     if (newNode->theType != 0) 
     { 
      cout << "  " << newNode->name << setw(23) << fixed << setprecision(2) << newNode->amount << "  "; 
      if (newNode->cleared == true) { 
       cout << "no" << endl; 
      } 
      else{ 
       cout << "yes" << endl; 
      } 
     } 
     else{ 
      cout << endl; 
     } 
    } 
    newNode = newNode->next; 
} while (newNode != NULL); 

cout << "End of List." << endl; 

return; 
} 
+0

您需要在循环的每次迭代中创建一个新节点,就像您在评论过的语句中所做的一样。 –

+0

此代码有*许多*错误的东西。原则上,正如@ Cheersandhth.-Alf指出的那样,您不是创建新节点,而是覆盖单个节点。更一般地说,在测试任何代码之前,你会写很多代码,并且无法解耦你的函数。从一个更简单的Node类开始,测试一切,然后逐步构建。 – Beta

回答

0
// ... 
    counter++; 

    // create next node here: 
    newNode = new budgetItem; 
} 

对于我们需要在内存中分配新对象列表中的每个新元素。你一次又一次地使用同一个对象。

+0

感谢评论家伙,我现在试着解决这个问题。 – Bubz21