Verification si il'ya une faute dans cette program
chdoula22
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
null -
null -
Bonjour,
je veux savoir s'il ya des fautes dans ce program car j'arrive pas a faire l'exécution correctement ( surtt dans l'enregistrement des contacts dans un fichier )
merci d'avance
mon code :
je veux savoir s'il ya des fautes dans ce program car j'arrive pas a faire l'exécution correctement ( surtt dans l'enregistrement des contacts dans un fichier )
merci d'avance
mon code :
/************************* *Répértoire téléphonique* *************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> /* Les structures utilisées dans ce program */ typedef struct { char nom[20]; char prenom[20]; char cin[8]; } abonne; typedef struct { int num; char rue [25]; char ville [20]; char code[4]; } adresse; typedef struct { int numtel; abonne abonne; adresse adresse; }contact ; int taille ; /* Prototype des fonctions utilisées dans ce program */ int rechercher (contact* tabcontact); void ajout_contact(contact* tabcontact); void modifie_contact(contact* tabcontact,int pos); void supprime_contact(contact* tabcontact,int pos); void affiche_tableau(contact*tabcontact1); void affiche_contact(contact* tabcontact,int pos); void quitter(contact* tabcontact); /* Program principal */ int main() { int a ; char x ; contact tabcontact [50]; do{ printf("\t******************************************************************\n"); printf("\t\t\t Menu Principal \n"); printf("\t******************************************************************\n"); printf("\t 1 pour ajouter un nouveau contact \n"); printf("\t 2 pour afficher un contact \n"); printf("\t 3 pour modifier les information d'un contact \n"); printf("\t 4 pour supprimer un contact \n"); printf("\t 5 pour quitter \n"); printf("\t******************************************************************\n"); printf("\t\n"); printf(" \t Veuillez entrer votre choix\n\n") ; fflush(stdin); x=getchar(); switch (x) { case '1' : {ajout_contact (tabcontact ),affiche_tableau(tabcontact);} break ; case '2' :{ a = rechercher (tabcontact); affiche_contact (tabcontact, a);break;}; case '3' : { a = rechercher (tabcontact); modifie_contact (tabcontact, a) ; break;} ; case '4' : { a = rechercher (tabcontact); supprime_contact (tabcontact, a) ; break;} ; case '5' : {quitter(tabcontact);break;} default : printf("choix inconnue"); } }while (x=='1' || x=='2'|| x=='3'||x=='4' ); return 0; } /* Fonction permettant de quitter le program*/ void quitter(contact* tabcontact) {int i; FILE* fichier =fopen("contact.txt","ab"); for (i=0 ; i< taille;i++) { fwrite(&tabcontact[i],sizeof(contact),1,fichier); } fclose(fichier); } /* Fonction permettant d'ouvrir un fichier enregistré*/ void init(contact* tabcontact) { FILE*fichier; contact clt ; fichier=fopen("contact.txt","rb"); if (fichier!=NULL) { while (!feof(fichier)) { fread(&clt,sizeof(contact),1,fichier); tabcontact[taille]=clt; taille++; } } else printf("le fichier n'existe pas"); } /* Fonction permettant d'afficher un contact*/ void affiche_contact(contact* tabcontact,int pos) { printf("\t\n"); printf( "\tle nom du contact \t %s \n ",tabcontact[pos].abonne.nom); printf( "\tle prenom du contact \t %s\n ",tabcontact[pos].abonne.prenom); printf( "\tle cin du contact \t %s\n ",tabcontact[pos].abonne.cin); printf( "\tle rue du contact est \t %s\n ",tabcontact[pos].adresse.rue); printf( "\tla ville du contact est \t %s\n ",tabcontact[pos].adresse.ville); printf( "\tle code postale du contact est \t %s\n ",tabcontact[pos].adresse.code); printf( "\tle numero de la maison est \t %d\n ",tabcontact[pos].adresse.num); printf( "\tle numéro téléphonique du contact est\t %d\n ",tabcontact[pos].numtel); printf("\t\n"); } /* Fonction permettant d'afficher le tableau de contact */ void affiche_tableau(contact* tabcontact) { int i ; for (i=0;i< taille;i++) affiche_contact(tabcontact,i); } /* Fonction permettant de rechercher un contact et de rendre son indice de tableau */ int rechercher (contact* tabcontact) { char y; int i; int num; char nomm[25]; char prenomm[25]; char cinn[25]; printf( " \t tapez 1 pour lancer une recherche par numéro \t \n "); printf( "\t tapez 2 pour lancer une recherche par abonnée \t\n"); fflush(stdin); y=getchar(); switch(y) { case '1' : {printf("donner le numéro \t"); scanf("%d",&num); for (i=0;i<taille+1;i++) if (tabcontact[i].numtel == num) return i; else return -1; break; } case '2' : { printf("\tdonner le nom du contact\t"); scanf("%s",nomm); printf("\tdonner le prénom du contact\t"); scanf("%s",prenomm); printf("\tdonner le numero de cin du contact\t\n\n"); scanf("%s",cinn); for (i=0;i<taille+1;i++) { if ((strcmp(tabcontact[i].abonne.nom , nomm)==0) && (strcmp(tabcontact[i].abonne.prenom , prenomm)==0)&& (strcmp(tabcontact[i].abonne.cin , cinn)==0)) return i; else return -1 ; } break; } } return -1; } /* Fonction permettant d'ajouter un nouveau contact*/ void ajout_contact(contact* tabcontact) { do { printf( "\tintroduire le nom \t ") ; scanf("%s",tabcontact[taille].abonne.nom) ; printf( "\tintroduire le prenom \t") ; scanf("%s",tabcontact[taille].abonne.prenom) ; printf( "\tintroduire le num de cin \t") ; scanf("%s",tabcontact[taille].abonne.cin); printf( "\tintroduire la rue \t ") ; scanf("%s",tabcontact[taille].adresse.rue); printf( "\tintroduire la ville \t "); scanf("%s",tabcontact[taille].adresse.ville); printf( "\tintroduire le numero de la maison\t ") ; scanf("%d",&tabcontact[taille].adresse.num); printf( "\tintroduire le code postal \t "); scanf("%s",tabcontact[taille].adresse.code); printf( "\tintroduire le numero de telephone \t ") ; scanf("%d",&tabcontact[taille].numtel); taille ++; } while (printf("\n \tvoulez vous ajouter un autre contact O/N \t"),fflush(stdin),getchar()=='O'); } /* Fonction permettant de modifier un contact enregistré*/ void modifie_contact(contact* tabcontact,int pos) { printf( "\tintroduire le nouveau nom\n ") ; scanf("%s",tabcontact[pos].abonne.nom) ; printf( "\tintroduire le nouveau prenom\n ") ; scanf("%s",tabcontact[pos].abonne.prenom) ; printf( "\tintroduire le nouveau num de cin\n ") ; scanf("%s",tabcontact[pos].abonne.cin); printf( "\tintroduire la nouvelle rue\n ") ; scanf("%s",tabcontact[pos].adresse.rue); printf( "\tintroduire la nouvelle ville\n "); scanf("%s",tabcontact[pos].adresse.ville); printf( "\tintroduire le nouveau code postal \n"); scanf("%s",tabcontact[pos].adresse.code); printf( "\tintroduire le nouveau numero du maison \n\n") ; scanf("%d",&tabcontact[pos].adresse.num); printf( "\tintroduire le nouveau numero de téléphone \n\n") ; scanf("%d",&tabcontact[pos].numtel); } /* Fonction permettant de supprimer un contact */ void supprime_contact(contact* tabcontact,int pos) { int i; for (i=pos ; i< taille-1 ;i++ ) { tabcontact[i]= tabcontact[i+1]; taille-- ; } }
A voir également:
- Verification si il'ya une faute dans cette program
- Verification lien internet - Guide
- Verification windows 11 - Guide
- Verification cloudflare impossible ✓ - Forum Cloud
- Program files - Forum Jeux vidéo
- Invalid configuration information please run setup program ✓ - Forum Windows XP
2 réponses
Bonjour,
compile ton programme, tu verras bien si ça marche, le debugger te trouvera les éventuelles fautes. Il sert à ça.
Cordialement.
compile ton programme, tu verras bien si ça marche, le debugger te trouvera les éventuelles fautes. Il sert à ça.
Cordialement.
Salut chdoula22,
Quelques indications générales, parce que ton code est trop long.
Tu devrais créer le fichier en mode texte, et non binaire, et y stocker des chaînes de caractères seulement, même pour les données ayant des types numériques.
Si tu tiens à utiliser des types numériques, il te faudra les sérialiser, par exemple, comme cela : http://troydhanson.github.io/tpl/index.html mais ce n'est vraiment pas nécessaire dans ton projet, à mon sens.
Tes %s dans tes scanf ne vont prendre qu'un mot, alors si à "rue", je tape "rue de la Liberté", tu n'auras que "rue", et "de", ira à "ville", etc. Utilise fgets avec stdin avec l'indication du nombre maximal de caractères à prendre en compte, ou un spécificateur de taille au %s dans ton scanf (par exemple
Tu devrais retirer tes fflush(stdin), ce n'est pas du C standard et ce n'est pas portable.
Pour vider le flux stdin après un scanf, tu fais comme cela :
http://c-faq.com/stdio/stdinflush2.html
Dal
Quelques indications générales, parce que ton code est trop long.
Tu devrais créer le fichier en mode texte, et non binaire, et y stocker des chaînes de caractères seulement, même pour les données ayant des types numériques.
Si tu tiens à utiliser des types numériques, il te faudra les sérialiser, par exemple, comme cela : http://troydhanson.github.io/tpl/index.html mais ce n'est vraiment pas nécessaire dans ton projet, à mon sens.
Tes %s dans tes scanf ne vont prendre qu'un mot, alors si à "rue", je tape "rue de la Liberté", tu n'auras que "rue", et "de", ira à "ville", etc. Utilise fgets avec stdin avec l'indication du nombre maximal de caractères à prendre en compte, ou un spécificateur de taille au %s dans ton scanf (par exemple
scanf("%24s", tabcontact[taille].adresse.rue);).
Tu devrais retirer tes fflush(stdin), ce n'est pas du C standard et ce n'est pas portable.
Pour vider le flux stdin après un scanf, tu fais comme cela :
while((c = getchar()) != '\n' && c != EOF) /* discard */ ;
http://c-faq.com/stdio/stdinflush2.html
Dal
Oui, au temps pour moi, je l'utilise rarement (au profit de fgets). Il faut donc encore compliquer l'expression de la façon suivante :
Dal
scanf("%24[^\n]",tabcontact[taille].adresse.rue);pour que scanf prenne tous les caractères jusqu'au
'\n', à l'exclusion de ce caractère, et dans la limite de 24 caractères.
Dal