begin process at 2012 05 29 16:09:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[c] plantage du program,base 2 donné, surmen un pb de struct


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[c] plantage du program,base 2 donné, surmen un pb de struct

lundi 17 mai 2004 à 03:23:33 | [c] plantage du program,base 2 donné, surmen un pb de struct

Diony


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

typedef struct ingredient {char nom_ing[N];
char quantite[N];
struct ingredient * ing_suiv;
}ingredient;

typedef struct ingredient * liste_ing;

typedef struct recette { char nom[N];
liste_ing l_ing;
char tps[N];
char facon[N];
struct recette * rec_suiv;
}recette;

typedef struct recette * liste_recettes;



void affiche_ingredient(liste_ing i){
printf(" %s : %d \n",i->nom_ing,i->quantite);
if (i->ing_suiv!=NULL) affiche_ingredient(i->ing_suiv);}


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");

else{ j=atoi(l->tps);
if (j==i) {affiche_recette(l);
system("PAUSE");
affiche_recette_tps(l->rec_suiv,i);
}
else affiche_recette_tps(l->rec_suiv,i);
}
}

int rech_tps_mini(liste_recettes l,int i){
int t;
if (l==NULL) {return (i);}
else { t=atoi(l->tps);
if (t<i) {rech_tps_mini(l->rec_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 (v<u) affiche_recette_tps(l,v);
else affiche_recette_tps(l,u);
}}



void ajout_recette(){
FILE *recet;
char mot[N];
int i,j;
recet= fopen ("recettes.dat", "a");
if (!recet)
{printf ("*** Impossible d'ouvrir le fichier ***\n");
system("PAUSE");
system("cls");
}

else system("cls");printf("\n\n");
fseek(recet, 0, SEEK_END);
printf("Ecrivez le nom de la recette : ");
getchar();gets(mot);
strcat(mot,":");
fprintf(recet, "%s", mot);
printf("Combien y a t il d ingredients differents ? ");scanf("%d",&i);
while(i!=0){
printf("Ecrivez le nom de l ingredient : ");
getchar();gets(mot);
strcat(mot,",");
fprintf(recet, "%s", mot);
printf("Ecrivez la quantite de l\' ingredient : ");
scanf("%d",&j);
fprintf(recet, "%d", j);
if (i==1) {fprintf(recet, "%s", ":");}
else {fprintf(recet, "%s", ";");}
i=i-1; }
printf("Ecrivez la duree approximative en minute de preparation de la recette : ");
scanf ("%s", &mot);
strcat(mot,":");
fprintf(recet, "%s", mot);
printf("Saisissez la recette : ");
getchar();gets(mot);
strcat(mot,"\n");
fprintf(recet, "%s", mot);
fclose(recet);
}


void creer_ingredient(char t[N], liste_ing * ing)
{
char r[N];
if (t == NULL)
return;
strcpy(r,t);
if ((strtok(r,";")!=NULL)&&(*ing==NULL))
{
*ing=(liste_ing)malloc(sizeof(ingredient));
strcpy((*ing)->nom_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));
}

}


void inserer_recette_fin_liste(char a[N],liste_recettes *l) {
char t[N];
liste_ing li;
strcpy(t,a);
if (*l==NULL) {li=NULL;
*l=(liste_recettes)malloc(sizeof(recette));
strcpy((*l)->nom,strtok(a,":"));
strtok(NULL,":")
// creer_ingredient(strtok(strchr(strchr(t,':'),':'),":"),&li);
strcpy((*l)->tps,strtok(NULL,":"));
strcpy((*l)->facon,strtok(strrchr(a,':'),"\n"));
// (*l)->l_ing=li;
(*l)->rec_suiv=NULL;
}
else inserer_recette_fin_liste(a,&((*l)->rec_suiv));
}




int menu(liste_recettes l){
int i,j;

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");}

else { while(!feof(r)) {

if(fgets(a,10000,r)==NULL){goto begin_loop;}
inserer_recette_fin_liste(a,&l);
;
}} begin_loop:

menu(l);
fclose(r);
}
lundi 17 mai 2004 à 03:25:13 | Re : [c] plantage du program,base 2 donné, surmen un pb de struct

Diony


les lignes concernées sont :

creer_ingredient(strtok(strchr(strchr(t,':'),':'),":"),&li);
(*l)->l_ing=li;
lundi 17 mai 2004 à 13:02:33 | Re : [c] plantage du program,base 2 donné, surmen un pb de struct

ymca2003


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,':');


Cette discussion est classée dans : system, liste, printf, recette, ing


Répondre à ce message

Sujets en rapport avec ce message

[c] pour les motivés ,structurer un fichier [ par Diony ] bonjour , voici mon programme . je n arrive pas a structurer mon fichier a cause de la fonction inserer_recette_fin_liste qui doit normalement inserer erreur undefined reference to winmain [ par stoner2008 ] bonjour les amis..j'ai écrit un code source pour gerer une agence de location de voiture.cependant lors de l'execution du programme,une erreur s'affic va_list [ par garslouche ] Salut à tous,je voudrais faire un truc idiot mais c juste pour un test : je voudrais faire une fonction myprintf qui fasse comme printf (en utilisant Sélection "intelligente" ComboBox [ par SebDeBib ] Salut, j'ai une ComboBox, type DropDown, càd où je peux rentrer du texte ou saisir dans la liste... C'est une fenêtre de liste de recettes. Au début, [c] erreur malloc (incompatible types in assignment) [ par Diony ] voici mon programme : #include #include #include typedef struct recette { char * nom; struct ingredient * ing; liste chainée [ par skulls94 ] bonjour, je dois faire un  programme qui lit un fichier mot à mot et qui les stocke dans une liste chainée seulement si ils ne sont pas deja present.v Fonction recherche (listes chainées) [ par adri10 ] Bonjour à tous, Bon voilà j'ai un gros problème avec ma fonction recherche en liste chainées. Je pensais que mon programme était correct puisqu'en le Une partie de mon programme ne fonctionne pas [ par imoum ] mon programme s'execute normalement seulement la partie lorsque j'ajoute un livre le programme cesse de fonctionner et se ferme. bien que l'ajout d'un Probleme avec l'affichage dans Strusture [ par m2z ] Salut Les Amis [^^clinoeil1] j'ai trouvé un probleme dans mon programme de gestion d'eleves plus exactement lors de l'affichage ou le programme m'


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales