NiTrOuS Posté(e) le 30 mars 2004 Partager Posté(e) le 30 mars 2004 Voilà je suis entrain de faire un programme, et je suis face a un probleme: Voici le code: #include<conio.h> #include<stdio.h> #include<string.h> #define key_up 72 #define key_down 80 int menu_deroulant(); void enreg_fiche(); void affiche_fiche(); struct enreg { char nom[30]; char prenom[30]; char initiales[3]; char datenais[11]; char sexe; char rue[30]; short numero; char codepost[5]; char ville[30]; }; /*Structure de la fiche*/ void main() //Fonction principale { int i; i=menu_deroulant(); if(i==0) enreg_fiche(); else if(i==1) affiche_fiche(); } int menu_deroulant() { char tab[5][100]={"Enregistrer un employe","Afficher un employe","Modifier un employe","Effacer un employe","Liste des conges"}; int ancpos,anci,pos,i,touche,max=5; clrscr(); for(i=0;i<max;i++) /*Affichage du menu au depart*/ { gotoxy(12,5+i); printf("%s\n",tab[i]); } pos=5; i=0; do { gotoxy(12,pos); highvideo(); cprintf("%s",tab[i]); normvideo(); touche=getch(); ancpos=pos; anci=i; if(touche==0) { touche=getch(); if(touche==key_down) { if(i==max-1) { pos=5; i=0; } else { ++pos; ++i; } } if(touche==key_up) { if(i==0) { pos=9; i=max-1; } else { --pos; --i; } } gotoxy(12,ancpos); cprintf("%s",tab[anci]); } } while(touche!=13); gotoxy(12,20); return(i); } void enreg_fiche() /*Fonction d enregistrement d un employe*/ { struct enreg fiche; int i; FILE *f; f=fopen("employe.dat","wb"); /*Ouverture en ‚criture*/ if (f==NULL) printf("Impossible d ouvrir le fichier"); else { for(i=0;i<1;i++) /*Lecture de la fiche*/ { fflush(stdin); clrscr(); printf("\nEntrez le nom de l employe: "); scanf("%s",fiche.nom); printf("\nEntrez le prenom de l employe: "); scanf("%s",fiche.prenom); printf("\nInitiales: "); scanf("%s",fiche.initiales); printf("\nEntrez la date de naissance de l employe: "); scanf("%s",fiche.datenais); printf("\nEntrez le sexe de l employe (fille: F garcon: G): "); scanf(" %c",&fiche.sexe); fflush(stdin); printf("\nAdresse de l employe\n\nRue: "); gets(fiche.rue); printf("\nNumero: "); scanf("%hd",&fiche.numero); printf("\nCode postal: "); scanf("%s",fiche.codepost); printf("\nVille: "); scanf("%s",fiche.ville); fwrite(&fiche,sizeof(fiche),1,f); } } } void affiche_fiche() /*Fonction d affichage d une fiche*/ { struct enreg fiche; int i; FILE *f; f=fopen("employe.dat","rb"); /*Ouverture en lecture*/ if(f==NULL) printf("Le fichier n existe pas"); else { fread(&fiche,sizeof(struct enreg),1,f); while(!feof(f)); { printf("\nLe nom de l employe est: %s",fiche.nom); printf("\nLe prenom de l employe est: %s",fiche.prenom); printf("\nLes initiales de l employe sont: %s",fiche.initiales); printf("\nLa date de naissance de l employe est: %s",fiche.datenais); printf("\nLe sexe de l employe est: %c",fiche.sexe); printf("\nAdresse de l employe\n\nRue: %s",fiche.rue); printf("\nNumero: %hd",fiche.numero); printf("\nCode postal: %s",fiche.codepost); printf("\nVille: %s",fiche.ville); fread(&fiche,sizeof(fiche),1,f); } fclose(f); } getch(); } Quand je selectionne la deuxieme option (affichage) ca plante, a mon avis cest une histoire de pointeur, car il n est pas déclaré dans main donc n existe plus quand la fonction a été executée ... Pouvez vous m aider ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Angel Eyes Posté(e) le 30 mars 2004 Partager Posté(e) le 30 mars 2004 pour commencer, mets ta structure à 0 ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
NiTrOuS Posté(e) le 30 mars 2004 Auteur Partager Posté(e) le 30 mars 2004 comment ca ? T as testé mon programme ? Meme sans faire differentes fonctions, si je mets tout dans main et que je mets des conditions par rapport a la valeur de retour de la fonction du menu deroulant (en se basant sur la valeur que prend i) ca me plante quand je selectionne la deuxieme solution :( Lien vers le commentaire Partager sur d’autres sites More sharing options...
Angel Eyes Posté(e) le 30 mars 2004 Partager Posté(e) le 30 mars 2004 il écrit quoi, ton programme, à la sortie ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Angel Eyes Posté(e) le 30 mars 2004 Partager Posté(e) le 30 mars 2004 rhaaaaa, j'ai même plus de compilo qui supporte conio.h... kestufous à utiliser un compilo d'il y a 10 ans ? tu travailles avec borlandc++ 3 ou quoi ?? Lien vers le commentaire Partager sur d’autres sites More sharing options...
NiTrOuS Posté(e) le 30 mars 2004 Auteur Partager Posté(e) le 30 mars 2004 ouai turbo c, borland, des vieux trucs Il met aucun message d erreur, soit il plante le programme, soit je sais plus rien faire :( par contre quand j opte pour creer une fiche ca ca va mais pour l afficher (option 2, valeur de i = 1) ca plante :( Lien vers le commentaire Partager sur d’autres sites More sharing options...
Angel Eyes Posté(e) le 30 mars 2004 Partager Posté(e) le 30 mars 2004 je parlais pas des erreusr à la sortie, mais du texte tout court... Sorry, mais je sais pas compiler ton truc pour le moment, ai plus les outils... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Angel Eyes Posté(e) le 30 mars 2004 Partager Posté(e) le 30 mars 2004 jamais de ; après un while !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
XZombi Posté(e) le 30 mars 2004 Partager Posté(e) le 30 mars 2004 lol Nitrous révise tes cours de prog! Lien vers le commentaire Partager sur d’autres sites More sharing options...
NiTrOuS Posté(e) le 31 mars 2004 Auteur Partager Posté(e) le 31 mars 2004 oups comment ca se fait que ce connard de compilateur a pris le ; après mon while ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
NiTrOuS Posté(e) le 31 mars 2004 Auteur Partager Posté(e) le 31 mars 2004 Angel Eyes t es un Dieu c'était ca qui me faisait tout rater ... J aurai pu encore chercher ... Merci beaucoup Lien vers le commentaire Partager sur d’autres sites More sharing options...
Angel Eyes Posté(e) le 31 mars 2004 Partager Posté(e) le 31 mars 2004 oups comment ca se fait que ce connard de compilateur a pris le ; après mon while ? c'est une erreur d'algo, pas de syntaxe... le compilo te laisse faire tes conneries tant qu'elles sont syntaxiquement correctes. PS : ton programme ne plante pas, il se bloque, c'est radicalement différent !!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
NiTrOuS Posté(e) le 31 mars 2004 Auteur Partager Posté(e) le 31 mars 2004 oui, je me souviens que tu avais sorti ca dans un autre topic Lien vers le commentaire Partager sur d’autres sites More sharing options...
NiTrOuS Posté(e) le 1 avril 2004 Auteur Partager Posté(e) le 1 avril 2004 #include<conio.h> #include<stdio.h> #include<string.h> #define key_up 72 #define key_down 80 int menu_deroulant(); void enreg_fiche(); void affiche_fiche(); struct enreg { char nom[30]; char prenom[30]; char initiales[3]; char datenais[11]; char sexe; char rue[30]; short numero; char codepost[5]; char ville[30]; }; /*Structure de la fiche*/ void main() //Fonction principale { int i; do { i=menu_deroulant(); if(i==0) enreg_fiche(); else if(i==1) affiche_fiche(); } while(i!=4); } int menu_deroulant() { char tab[5][100]={"Enregistrer un client","Afficher un client","Modifier un client","Effacer un client","Quitter"}; int ancpos,anci,pos,i,touche,max=5; clrscr(); for(i=0;i<max;i++) /*Affichage du menu au depart*/ { gotoxy(12,5+i); printf("%s\n",tab[i]); } pos=5; i=0; do { gotoxy(12,pos); highvideo(); cprintf("%s",tab[i]); normvideo(); touche=getch(); ancpos=pos; anci=i; if(touche==0) { touche=getch(); if(touche==key_down) { if(i==max-1) { pos=5; i=0; } else { ++pos; ++i; } } if(touche==key_up) { if(i==0) { pos=9; i=max-1; } else { --pos; --i; } } gotoxy(12,ancpos); cprintf("%s",tab[anci]); } } while(touche!=13); gotoxy(12,20); return(i); } void enreg_fiche() /*Fonction d enregistrement d un employe*/ { struct enreg fiche; int i,j; FILE *f; f=fopen("employe.dat","wb"); /*Ouverture en ‚criture*/ if (f==NULL) printf("Impossible d ouvrir le fichier"); else { for(i=0;i<1;i++) /*Lecture de la fiche*/ { fflush(stdin); clrscr(); printf("\nEntrez le nom de l employe: "); scanf("%s",fiche.nom); printf("\nEntrez le prenom de l employe: "); scanf("%s",fiche.prenom); printf("\nInitiales: "); scanf("%s",fiche.initiales); printf("\nEntrez la date de naissance de l employe: "); scanf("%s",fiche.datenais); printf("\nEntrez le sexe de l employe (fille: F garcon: G): "); scanf(" %c",&fiche.sexe); fflush(stdin); printf("\nAdresse de l employe\n\nRue: "); gets(fiche.rue); printf("\nNumero: "); scanf("%hd",&fiche.numero); printf("\nCode postal: "); scanf("%s",fiche.codepost); printf("\nVille: "); scanf("%s",fiche.ville); fwrite(&fiche,sizeof(fiche),1,f); } } } void affiche_fiche() /*Fonction d affichage d une fiche*/ { struct enreg fiche; int i; FILE *f; f=fopen("employe.dat","rb"); /*Ouverture en lecture*/ if(f==NULL) printf("Le fichier n existe pas"); else { fread(&fiche,sizeof(struct enreg),1,f); while(!feof(f)) { printf("\nLe nom de l employe est: %s",fiche.nom); printf("\nLe prenom de l employe est: %s",fiche.prenom); printf("\nLes initiales de l employe sont: %s",fiche.initiales); printf("\nLa date de naissance de l employe est: %s",fiche.datenais); printf("\nLe sexe de l employe est: %c",fiche.sexe); printf("\nAdresse de l employe\n\nRue: %s",fiche.rue); printf("\nNumero: %hd",fiche.numero); printf("\nCode postal: %s",fiche.codepost); printf("\nVille: %s",fiche.ville); fread(&fiche,sizeof(fiche),1,f); } fclose(f); } getch(); } Bon voilà, maintenant j ai fait un boucle pour mon menu déroulant, alors je fais "enregistrer un client" je l enregistre puis je revient au menu deroulant et la je selectionne "afficher un client" et ca ne me met rien par contre si j enregistre le client, que je ferme mon programme, que je le reexecute et que je fais afficher la ca marche, peut on m aider ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
NiTrOuS Posté(e) le 1 avril 2004 Auteur Partager Posté(e) le 1 avril 2004 bon ben j ai trouvé, j ai juste oublié de fermer mon fichier apres l enregistrement Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 1 avril 2004 Partager Posté(e) le 1 avril 2004 Essaie simplement un flush() pour bien écrire les données du buffer vers le fichier. Ca devrait t'éviter de fermer/réouvrir le fichier, ce qui n'est pas terrible et pose des problème de performance en cas d'usage intensif de l'application. Lien vers le commentaire Partager sur d’autres sites More sharing options...
NiTrOuS Posté(e) le 1 avril 2004 Auteur Partager Posté(e) le 1 avril 2004 ha bon ben je savais pas :) merci pour le conseil bon j ai une autre question j ai un fichier client avec une structure du genre struct { int numero; char nom[30]; }; j enregistre différents clients dans le fichier client avec la structure ci dessus. J aimerai faire une fonction de recherche par numero de client mais je ne vois vraiment pas comment faire ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.