سوالی در مورد پیاده سازی لینک لیست َشامل اطلاعات دانشجو - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

سوالی در مورد پیاده سازی لینک لیست َشامل اطلاعات دانشجو

0 امتیاز

سلام.من یه برنامه با لینک لیست دارم می نویسم.به این ترتیب که باید اطلاعت چند دانشجو رو بگیره .که این دانشجو ها یا دانشجوی دانشکده کامپیوتر اند یا مکانیک و حالا یه سری تابع هم واسه کارایی مثل حذف دانشجو و ... داره.من وقتی  برنامه رو اجرا  یا دیباگ می کنم فقط  اطلاعت 3 دانشجو رو می گیره و منتظر دستور بعدی میشه.در حالی که هر چی هم می خوام تو کنسول تایپ کنم چیزی تایپ نمیشه.درواقع  تو دیباگ اینطوری میشه که میره سراغ if  بعدی برنامه(یه تابع دیگه که دانشجوی n  رو از نظر معدل چاپ میکنه) و همین طور منتظر می مونه.یعنی نمیدونم چجوریه که تا سه دانشجو بیشتر نمیگیره.ممنون میشم اگه کمکم کنید.

int conter_comp=0;
int conter_mach=0;
struct student
{
	char name[15];
	char family[15];
	char college[10];
	float ave;
	int ID;
	student *next;
	student *prev;
};
student *head=0;
bool _input(char name[15],char family[15],int ID ,float ave,char college[10])
{
	int flag=0;
	student *new_student=new student;
	new_student->ave=ave;
	new_student->ID=ID;
	strcpy(new_student->name,name);
	strcpy(new_student->family,family);
	strcpy(new_student->college,college);
	if(!head)
	{
		head=new_student;
		new_student->next=0;
		return true;
	}
	student *p,*q;
	p=q=head;
	while(p && p->ave > ave)
	{
	  flag=1;
	  p=q;
	  p=p->next;
	}
	if(flag==0)
	{
		head=new_student;
		new_student->next=p;
	}
	q->next=new_student;
	new_student->next=p;
	new_student->prev=q;
	p->prev=new_student;
	return true;
}
bool print_n_college(char depa[4],int number)
{
	student *inf,*p;
	p=inf=head;
	if((strcmp(depa,"COMP")==0) && (number>conter_comp) )
	{
	
		cout<<"ERR"<<endl;
		return false;
	 
	}
	else if((strcmp(depa,"MACH")==0) && (number>conter_comp))
	{
	
		cout<<"ERR"<<endl;
		return false;
	 
	}
	else
	{
		for(;inf;inf=inf->next)
		{
			if(strcmp(inf->college,depa)==0)
			{
				p=inf;
				for(int i=0;i<number;i++)
				{
					p=p->next;
				}
				cout<<p->name<<' '<<p->family<<' '<<p->ID<<' '<<p->ave<<' '<<p->college<<endl;
				break;
			}
		}
		return true;
	}
}
int main()
{
	char name[15];
	char family[15];
	char college[10];
	float ave;
	int ID;
	int in=0;
	while(in!=6)
	{
		cin>>in;
		if(in==1)
		{
			cin>>name;
			cin>>family;
			cin>>ID;
			cin>>ave;
			cin>>college;
			if(strcmp(college,"COMP")==0)
				conter_comp++;
			if(strcmp(college,"MACH")==0)
				conter_mach++;
			_input(name,family,ID,ave,college);
		}
		if(in==2)
		{
		char dep[4];
		int number;
		cin>>dep;
		cin>>number;
		print_n_college(dep,number);
		
		}
}
	return 0;
}

 

سوال شده بهمن 23, 1392  بوسیله ی maryam (امتیاز 338)   12 33 44
دوباره تگ گذاری شد فروردین 11, 1393 بوسیله ی BlueBlade
لازم نیست تابع  _input  رو از نوع bool  تعریف کنین می تونین void تعریف کنین بعد هر جا که خواستین return خالی بزارین .

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

این خط مشکل داره  چون p=q میزاری بعد p رو میزاری p->next بعد دوباره p=q .....

    while(p && p->ave > ave)
    {
      flag=1;
      p=q;
      p=p->next;
    }

 

پاسخ داده شده بهمن 23, 1392 بوسیله ی هفت خط (امتیاز 116)   1 10 17
انتخاب شد بهمن 25, 1392 بوسیله ی مصطفی ساتکی
...