• 0
hicham@com

لا اجد سبب المشكله في برنامجي

سؤال

السلام عليكم و رحمة الله و بركاته

 

اخوتي الكرام لدي الكود الاتي كلما قمت بادخال أول بيان يتوقف فجأه و لم أجد سبب المشكله أرجو المساعده

البرنامج يقوم بقراءة بيانات طالب و اضافتها اما اول القائمة او اخرها ثم يعرض القائمة، كلما يصل الكود لقراءة رقم الطالب و ادخل الرقم يتوقف

#include<stdio.h>#include<stdlib.h>typedef struct eleves{	int num;	char nom[10];	char prenom[10];	struct eleves*suivant;}E;typedef E* liste;//Fonction Ajout teteliste Ajout_tete(liste p){	liste nouveau=(liste)malloc(sizeof(E));	printf("donner le numero:\t");	scanf("%d",&p->num);	printf("donner le nom:\t");	scanf("%s",p->nom);	printf("donner le prenom:\t");	scanf("%s",p->prenom);	nouveau->suivant=p;	p=nouveau;	return p;}//Fonction Ajout queuliste Ajout_fin(liste p){	liste nouveau=(liste)malloc(sizeof(E));	printf("donner le numero:\t");	scanf("%d",&p->num);	printf("donner le nom:\t");	scanf("%s",p->nom);	printf("donner le prenom:\t");	scanf("%s",p->prenom);	if(p==NULL)	{		p=nouveau;	}else{		liste temp=p;		while(temp->suivant!=NULL)		{			temp=temp->suivant;		}		temp->suivant=nouveau;	}	return p;}//Fonction Affichagevoid Affiche(liste p){	liste temp=p;	if(temp!=NULL)	{		printf("%d,%s\t%s",temp->num,temp->nom,temp->prenom);		Affiche(temp->suivant);	}}main(){	int n,i;	liste p=NULL;		printf("Donner le nbr d'eleves:\t");	scanf("%d",&n);	for(i=1;i<=n;i++)	{		p=Ajout_fin(p);	}	Affiche(p);return 0;system("pause");}
-1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

  • 0

* تجنب استخدام الفرنسية في كتابة المتغيرات والدوال.

* ضع مسافات لتسهيل قراءة البرنامج، بدل ان تكتب:

for(i=1;i<=n;i++)

اكتب:

for(i = 1 ; i <= n ; i++)

* يفضل استخدام المسافات بدل حرف الـtab في محرر النصوص لأن عرض الـtab غير ثابت في المتصفحات ومحررات النصوص، ادخل لإعدادات محررك وابحث عن خيار يبدل لك الـtab بمسافة (مسافتين أو أربع),

 

عند إضافة أول عنصر فأنت تضيفه عند العنوان NULL.

liste Ajout_fin(liste p){    liste nouveau=(liste)malloc(sizeof(E));    printf("donner le numero:\t");    scanf("%d",&p->num);    printf("donner le nom:\t");    scanf("%s",p->nom);    printf("donner le prenom:\t");    scanf("%s",p->prenom);    ....

يفترض أن تقرأ العناصر في nouveau وليس p.

 

أيضاً ضع قيمة مؤشر العنصر التالي nouveau->suivant = NULL.

  liste nouveau = (liste) malloc(sizeof(E));  if( nouveau == NULL )  {    perror("Error");    abort();  }  printf("donner le numero:\t");  scanf("%d", &nouveau->num);  printf("donner le nom:\t");  scanf("%s", nouveau->nom);  printf("donner le prenom:\t");  scanf("%s", nouveau->prenom);  nouveau->suivant = NULL;

في الدالة Affiche لاتعمل استدعاء ذاتي كي تطبع العناصر، بدل if بـwhile هكذا:

void Affiche(liste p){    liste temp=p;    while(temp!=NULL)    {        printf("%d,%s\t%s\n",temp->num,temp->nom,temp->prenom);        temp = temp->suivant;    }}

أو بدلها بـfor لتصبح أسهل قراءة:

void Affiche(liste p){  liste temp;  for(temp = p ; temp ; temp = temp->suivant)  {    printf("%d,%s\t%s\n", temp->num, temp->nom, temp->prenom);  }}
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك لقد صلحته و أتممته جزاك الله خيرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .