2014-03-01 2 views
0

난 아직도 내 연결리스트를 추적 할 수 있지만, 일부 진전을 마련했는지 알아내는 데 문제가 있어요.링크 된 목록을 추적하고 있습니까?

내 코드는 완벽 노드를 통해 텍스트 파일에서 데이터를 읽고 있지만 모든 노드를 보여주기 위해 쇼 기능을 제대로을 전송하는 방법을 알아낼 수 없습니다. 노드에서 데이터보기 FILE (제대로 작동하지 않는)

void insertAsFirstElement(ifstream& budgetFile, budgetItem *&head, budgetItem *&last, int number, int& counter) 
{ 
int ctype; 
string cname; 
double camount; 
char clearOrNot; 


while (!budgetFile.eof()) 
{ 
budgetItem *temp = new budgetItem; 


    budgetFile >> ctype >> cname >> camount >> clearOrNot; 

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

    last = temp; 

temp->next = NULL; 

if (counter == 0) 
{ 
    //head = temp; 
    head = temp; 
} 
    counter++; 
} 
} 

FROM

READING (하나 개의 노드의 데이터가 표시되고 ...) * 나는 모든 노드 및 모든 데이터를 보여주는이 필요합니다. (해야 독서와 관련이 있음)

void showList(budgetItem *current) 
{ 
if (isEmpty(current)) { 
    cout << "The list is empty." << endl; 
} 
else 
{ 
    cout << "The list contains: " << endl; 

    while (current != NULL) 
    { 
     cout << current->theType << " "; 
     cout << current->name << " "; 
     cout << current->amount << " "; 
     cout << current->cleared << endl; 

     current = current->next; 
    } 
} 
} 
+0

관련 내용 : 읽기 : [ "루프 상태에서 'iostream : eof'가 잘못된 것으로 간주되는 이유는 무엇입니까?]] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop -condition-considered-wrong) – WhozCraig

+0

나는 그것을 읽었다. 팁을 주셔서 감사합니다 – Bubz21

+0

하지만 지금까지의 문제에 대한 단서가 있습니까? – Bubz21

답변

0

이 코드가 배치되는 방법의 대부분에 동의하지 않지만 연결된 목록을 배선의 문제는 다음이지만 그러므로 더있다,

last = temp; 
temp->next = NULL; 

if (counter == 0) 
{ 
    //head = temp; 
    head = temp; 
} 

을 당신은 어떤 last 이전에 지적 포기하고 링크가 설정되었습니다. 계속되는 메모리 누출은 보너스 기능입니다.

는이 작업을 수행 :

temp->next = NULL; 

if (last != NULL) 
    last->next = temp; 
else 
    head = temp; 
last = temp; 

귀하의 코드는 상당히가 제대로 읽는 중지 할시기를 결정하는 시작으로 정리 될 수있다. budgetItem을 모듈화하는 것은 그래서뿐만 아니라 좋은 단계가 될 것 std::istream에서 자체을 읽을 수있을만큼 현명하다.

마지막으로, 나는 그렇지 않으면 나는 바퀴를 재발견하고 처음에 std::vector<budgetItem>을 사용하지 않는 당신을 말할 것, 이것이 학계입니다 가정합니다.

+0

어떤 이유로 든 연결된 목록에 표시되는 정보 및 정보가 내 목록을 내 방식대로 퍼팅했습니다.나는 실제 파일에서 데이터를 읽거나 표시하는 것을 제외하고는 그것들의 기초를 이해할 수있다. – Bubz21

+0

모든 도움을 주셔서 대단히 감사합니다. btw. 나는 당신이 말한 것을 더 많은 프로그램을 위해 고려할 것입니다. – Bubz21

0

프로그램에는 C++ STL 라이브러리의 std :: list를 사용해야합니다. push_back() 함수를 사용하여 std :: list 객체에 삽입 할 수 있습니다. 당신이 표준 : 목록에서 노드를 저장하면

, 당신은 읽고 요소를 표시하는 반복자를 기반으로 루프를 사용할 수 있습니다. 이 경우에는 구조 예산 항목에 대해 >> 및 < < 연산자를 오버로드해야합니다.

관련 문제