2017-12-02 6 views
-4

私は初心者です。私は、キューの順序(FIFO)で動的に割り当てられたリンクリストを書き込もうとしています。プログラムをコンパイルして実行することができます。しかし、何も印刷することはできません。だから、問題がリンクに存在するのか、それとも論理を出力するのかはわかりません。助けてください。キューリストのリンクリスト

#include <iostream> 
using std::cout; 
using std::cin; 
using std::endl; 
using std::ios; 
#include <iomanip> 
using std::setw; 
using std::left; 


struct course 
{ 
    char coursename[32]; 
    char term[32]; 
    int unit; 
    char grade; 
    course* next; 
}; 

void coutcourse(course*); 

int main() 
{ 
    char input; 
    course *p; 
    course *prev; 

    course PHILO225 = {"PHILO-225", "SP2017", 3, 'A'}; // examples 
    course COMSC110 = {"COMSC-110", "SP2017", 4, 'A'}; // 
    course COMSC165 = {"COMSC-165", "FA2017", 4, 'X'}; 

    course* start = 0; 
    course *t; 

    cout.setf(ios::left, ios::adjustfield); 

    while(true) 
    { 
     cout <<"Do you want to add a new course? [Y for yes, N for no]" << endl; 
     cin >> input; 
     if(input=='y'||input=='Y') 
     { 
      t= new course; 

      cout <<"Enter the name, term, units and grade for the new course in the same line, space separated." << endl; 

      cin >> t->coursename; 
      cin >> t->term; 
      cin >> t->unit; 
      cin >> t->grade; 

      for(p=start; p ; p=p->next) 
      { 
       t->next = 0; 
       if(start==0) 
       { 
        start=t; 
        p=t; 
       }     
       else    
       { 
        p->next=t; 
        p=t; 
       } 
      } 

      cout << endl <<setw(16)<<"COURSE"<<setw(16)<<"TERM" <<setw(16) <<"UNITS"<< setw(10)<<"GRADE" <<endl; 
      cout << "------------- -------- --------- -----------\n"; 

      for (p=start;p;p=p->next) 
       coutcourse(p); 
      cout << endl; 
      continue; 
     } 

     if(input=='N'||input=='n') 
      break; 
     else 
     { 
      cout << "Invalid. Please try again." << endl; 
      continue; 
     } 
    } 
    for(p=start, prev=0; p ; prev=p, p=p->next) 
    { 
     if(p) 
      prev->next=p->next; 
     else 
      start=p->next; 
     delete p; // this can be written in another way. delete from start 
    } 
} 

void coutcourse(course* start) 
{ 
    cout<< setw(16) << start->coursename<< setw(16) << start->term << setw(16) << start->unit << setw(16) << start->grade << endl; 
} 

ここで間違いを教えてください。ありがとうございました。

+5

デバッガの使用方法を学ぶ時間です。 – Incomputable

+0

推奨事項:意味のある変数名を使用してください。ヌルポインタには0ではなく 'nullptr'を使い、' for'ループの外には 't-> next = 0;'をとります。 – user4581301

答えて

0

これは明らかに宿題に関する質問です(そうでない場合はstd::listを使用してください)。私は完全な答えを出すつもりはありません。

for(p=start; p ; p=p->next) 

pがfalseに評価された場合、終了します。 pがNULLでリストの末尾に達した場合、pはfalseと評価されます。

上記を前提として、リストが空の場合はどうなりますか?