堆栈和队列

时间:2013-09-14 08:58:42

标签: c++

美好的一天。我的程序有问题。这是专为小诊所设计的基本上

记录患者的预约信息。所以这是我的问题,起初它是

工作但是每当我输入

输入第3名患者(第3个节点)的信息时

它将出错的名称。这是一个队列。 `

#include <iostream>
using namespace std;
struct clnc_hrs 
{

std:: string name;
std:: string symptms;
  int age;
  int cont_num;
  clnc_hrs *next;



};

class List{
private:
    clnc_hrs *rear;
    clnc_hrs *front;
public:
    List();
    void BookAppointment();
    void DeletePrevious();
    void DisplaySchedule();
};
List::List(){
rear = NULL;
front = NULL;
}

void List::BookAppointment ()
{
   std:: string N;
   std:: string S;
   int A;
   int CN;




clnc_hrs *newnode = (clnc_hrs*)malloc(sizeof(clnc_hrs));

 fflush(stdin);

 cout<<"enter name of the patient:";
 std::getline(cin, N);
 newnode->name = N;
 fflush(stdin);

 cout<<"enter age of the patient:";
 cin>>A;
 newnode->age = A;
 fflush(stdin);

 cout<<"enter contact number of the patient:";
 cin>>CN;
 newnode->cont_num = CN;
 fflush(stdin);


 cout<<"enter the complaints or symptoms of the patient:";
 std::getline(cin, S);
 newnode->symptms = S;



 newnode->next = NULL;

if(front == NULL)
{
      fflush(stdin);
      front = newnode;
      fflush(stdin);
}
else
{
    fflush(stdin);
    rear->next = newnode;
    fflush(stdin);
}

rear = newnode;   

}

void List::DisplaySchedule ()
{
 clnc_hrs *disp = (clnc_hrs*)malloc(sizeof(clnc_hrs));
 disp = front;


 if(front == NULL)
 {
          cout<<"there's no appointment for today"<<endl;
 }
 else
 {
     while(disp != NULL)
     {
                cout<<endl;
                cout<<"name:"<<disp->name<<endl;
                cout<<"age:"<<disp->age<<endl;
                cout<<"contact number:"<<disp->cont_num<<endl;
                cout<<"symptoms/complaints:"<<disp->symptms<<endl;
                cout<<endl;


                disp = disp->next;
     }
 }

}    

void List::DeletePrevious()
{
 clnc_hrs *newnode = (clnc_hrs*)malloc(sizeof(clnc_hrs));

 if(front == NULL)
 {
          cout<<"no appointments today"<<endl;
 }
 else
 {
     newnode = front;
     front = front->next;
     cout<<"The previous patient is: "<<endl;
     cout<<newnode->name<<endl;
     cout<<newnode->age<<endl;
     cout<<newnode->cont_num<<endl;
     cout<<newnode->symptms<<endl;


     delete newnode;
 }

}

int main ()
{
List list;
int ans;

while(true)
{       
cout<<"press 1 for booking an appointment\npress 2 to delete previous patients info   \npress 3 for display"<<endl;
cin>>ans;

if(ans == 1)
{
 list.BookAppointment();
}
else if(ans == 2)
{
list.DeletePrevious();
}

else if(ans == 3)
{
 list.DisplaySchedule();
}


}

system("pause");
}     

`

我希望有人可以帮助我。我正在使用dev c ++ 4.9.9.2

2 个答案:

答案 0 :(得分:3)

正如你在非家庭作业中所说的那样,只需使用STL - 即http://www.cplusplus.com/reference/queue/queue/

所有位&#39; bob都是为您完成的

答案 1 :(得分:2)

不要在C ++程序中使用malloc,它不能正确构造C ++对象,而是使用new

clnc_hrs *newnode = new clnc_hrs();

您可能有其他错误,但这是第一个错误。


cout<<"enter name of the patient:";
std::getline(cin, N);
newnode->name = N;

没有错,但有点浪费。这更简单

cout<<"enter name of the patient:";
std::getline(cin, newnode->name);

对于所有其他输入也是如此。


fflush(stdin);

是实现定义的行为。 fflush仅在输出流而非输入流上定义了行为。你似乎正在使用fllush(stdin);作为某种神奇的咒语,你希望它能解决你的问题。避免这种想法。了解您编写的代码到底发生了什么。在这种情况下,您应该删除对fflush(stdin);的所有电话。