[c] plantage du program,base 2 donné, surmen un pb de struct
cs_Diony
Messages postés11Date d'inscriptionmercredi 28 avril 2004StatutMembreDernière intervention27 mars 2006
-
17 mai 2004 à 03:23
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
17 mai 2004 à 13:02
jvous explique mon probleme . ce programme est une base de données de recettes . et il plante a la fonction inserer_recette_fin_liste (vers le milieu du progr)
j ai mi un // devant les lignes qui était defectueuse.
en fait chaque recette est constitué d un nom , d un tps , d un facon , et d une liste chainée d ingrédient
et c est au momen de la creation de la liste chainée d ingredient que ca déconne .j arrive a relier la liste a chaque recette.
je pense que le pb vien soit d un pb de pointeur soit d un pb de structur
Please HELP ME
d avance merci
mon programme :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
# define N 1000
void affiche_recette(liste_recettes l){
printf("\n Nom de la recette : %s \n\n",l->nom);
affiche_ingredient(l->l_ing);
printf("Temps de preparation : %s minutes \n\n",l->tps);
printf(" Instructions : %s \n\n\n",l->facon);
}
void recherche (liste_recettes l, char c[N]){
if (l==NULL) printf(" la recette ne fais pas partie du fichier source \n ");
else if (strcmp(c,l->nom)==0) affiche_recette(l);
else recherche(l->rec_suiv,c);
}
void recherche_selon_nom(liste_recettes l){
char chaine [N];
printf("\n\n\n Ecrivez le nom de la recette que vous souhaitez afficher : ");getchar();gets(chaine);
recherche(l,chaine);
}
void affiche_recette_tps(liste_recettes l,int i){
int j;
if (l==NULL) printf(" \n\n\n\n La recherche est terminee \n\n\n");
int rech_tps_mini(liste_recettes l,int i){
int t;
if (l==NULL) {return (i);}
else { t=atoi(l->tps);
if (trec_suiv,t);}
else {rech_tps_mini(l->rec_suiv,i);}}}
void recherche_tps_mini(liste_recettes l){
int u,v;
if (l==NULL)printf(" Le fichier recette est vide \n");
else {u=atoi(l->tps);
v=rech_tps_mini(l,u);
if (vnom_ing,strtok(t,","));
strcpy((*ing)->quantite,strtok(NULL,";"));
(*ing)->ing_suiv=NULL;
creer_ingredient(strtok(NULL,":"),&((*ing)->ing_suiv));
}
else
{
if ((strtok(r,";")!=NULL)&&(*ing!=NULL))
creer_ingredient(t,&((*ing)->ing_suiv));
}
printf(" ==================\n | Projet de C |\n ==================\n\n\n\n\n 1.Recherche de Recette \n\n\n\n 2.Ajout de recette \n\n\n\n 3.Exit\n\n\n\n\n\n");
printf("Faites votre choix 1 , 2 ou 3 : ");scanf("%d",&i);
if ((i!=1)&&(i!=2)&&(i!=3)) {system("cls");
printf("\n\n\n\n Vous n\' avez pas tape le bon chiffre , appuyez sur une touche et recommencez \n\n\n");
system("PAUSE");
system("cls");
menu(l);}
switch(i){
case 1: system("cls");
printf(" \n\n\nRecherche:\n----------\n\n\n 1.selon le nom de la recette \n\n\n 2.selon le temps de preparation \n\n\n 3.selon les ingredients presents dans la recette \n\n\n 4.selon le(s) couple(s) quantite-ingredient \n\n\n 5.Retour \n\n\n\n Faites votre choix : ");scanf("%d",&j);
switch(j){case 1: system("cls");
recherche_selon_nom(l);
system("PAUSE");
system("cls");
menu(l);
break;
case 2:system("cls");
recherche_tps_mini(l);
system("PAUSE");
system("cls");
menu(l);
break;
case 3:break;
case 4:break;
case 5:system("cls");
menu(l);
break;
}
break;
case 2: system("cls");
printf(" \n\n\n\n\n\n 1.Ajouter Recette \n\n\n\n 2.Retour \n\n\n\n\n\n Faites votre choix : ");scanf("%d",&j);
switch(j){case 1:ajout_recette();
system("cls");
printf("/n/n/n/n/n Si vous voulez effectuez une recherche incluant la nouvelle recette , vous devez redemarrer le programme ");
system("PAUSE");
menu(l);
break;
case 2:system("cls");
menu(l);
break;
}
case 3:system("cls");
printf("\n\n\n\n\n\n\n\n\n A B I E N T O T \n\n\n\n\n\n\n\n\n\n\n\n\n");
system("PAUSE");
break;
}
}
main ()
{
FILE *r;
liste_recettes l;
char a[N];
l=NULL;
r= fopen ("recettes.dat", "r");
if (!r) {printf ("*** Impossible d'ouvrir le fichier ***\n");
system("PAUSE");}
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 17 mai 2004 à 13:02
vérifie au moins le pointeur retourné par les fct strctr, au cas ou.
de plus faire strchr(strchr(t, ':'),':'); ne vas pas de trouver le 2ème ':' de ta châine mais va rester sur le premier.
à la rigueur c'est :
strchr(strchr(t, ':')+1,':');