تم النشر منذ 25 Apr 2014 السلام عليكم و رحمة الله و بركاته اخوتي الكرام لدي الكود الاتي كلما قمت بادخال أول بيان يتوقف فجأه و لم أجد سبب المشكله أرجو المساعدهالبرنامج يقوم بقراءة بيانات طالب و اضافتها اما اول القائمة او اخرها ثم يعرض القائمة، كلما يصل الكود لقراءة رقم الطالب و ادخل الرقم يتوقف#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 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 25 Apr 2014 * تجنب استخدام الفرنسية في كتابة المتغيرات والدوال.* ضع مسافات لتسهيل قراءة البرنامج، بدل ان تكتب: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 قام بالرد منذ 27 Apr 2014 بارك الله فيك لقد صلحته و أتممته جزاك الله خيرا 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
تم النشر منذ
السلام عليكم و رحمة الله و بركاته
اخوتي الكرام لدي الكود الاتي كلما قمت بادخال أول بيان يتوقف فجأه و لم أجد سبب المشكله أرجو المساعده
البرنامج يقوم بقراءة بيانات طالب و اضافتها اما اول القائمة او اخرها ثم يعرض القائمة، كلما يصل الكود لقراءة رقم الطالب و ادخل الرقم يتوقف
شارك هذا الرد
رابط المشاركة
شارك الرد من خلال المواقع ادناه