Fgets non prit en compte...
Résolu
Rhydan1
Messages postés
391
Date d'inscription
Statut
Membre
Dernière intervention
-
Rhydan1 Messages postés 391 Date d'inscription Statut Membre Dernière intervention -
Rhydan1 Messages postés 391 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je suis actuellement en train d'apprendre le C, et pour tester mes connaissances, j'ai voulu créer un petit programme qui enregistre des contacts et qui les ressorts à la demande.
Lorsque je lance le programme, et que je choisis "Créer un contact", il me saute le fgets du nom...
Voici mon code :
Et voici le screen du programme :
http://sky-project.t15.org/upload/ScreenProg.png
Je compte vraiment sur vous, je ne sais pas quoi faire...
Cordialement.
Lorsque je lance le programme, et que je choisis "Créer un contact", il me saute le fgets du nom...
Voici mon code :
#include <stdio.h> #include <stdlib.h> #define TAILLE_MAX 1000 char nom[150]; char Adresse[1000]; char num[150]; char Lsexe[6]; int sexe = 0; int choix = 0; int start = 0; int main() { FILE* fichier = NULL; char chaine[TAILLE_MAX] = ""; fichier = fopen("Répertoire.txt", "a"); if (fichier != NULL) { printf("1.Afficher les contacts\n2.Creer un contact\n"); scanf("%d", &start); switch(start) { case 1: while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On litle fichier tant qu'on ne reçoit pas d'erreur (NULL) { printf("%s", chaine); } break; case 2: do { printf("------Repertoire------\nNouveau contact :\n\n"); printf("Nom et prenom : "); fgets(nom, 150, stdin); printf("Adresse : "); fgets(Adresse, 1000, stdin); printf("N. de telephone : "); fgets(num, 150, stdin); printf("\n\n\nContact :\n %s %s %s.", nom, Adresse, num); // On l'écrit dans le fichier fprintf(fichier, "-----------------------------------------------\nNom de famille : %s\nAdresse : %s\nNuméro de téléphone : %s\n", nom, Adresse, num); printf("\n\n\n\n1.Nouveau contact\n2.Fermer\n"); scanf("%d", &choix); }while(choix == 1); break; } fclose(fichier); } else { printf("ERREUR : Fichier introuvable"); } return 0; }
Et voici le screen du programme :
http://sky-project.t15.org/upload/ScreenProg.png
Je compte vraiment sur vous, je ne sais pas quoi faire...
Cordialement.
A voir également:
- Fgets non prit en compte...
- Créer un compte google - Guide
- Installer windows 10 sans compte microsoft - Guide
- Créer un compte gmail - Guide
- Comment savoir qui regarde mon compte facebook - Guide
- Compte facebook désactivé - Guide
3 réponses
Bonjour,
Alors tout d'abord, je te déconseille l'utilisation de variables globales (sauf dans certains cas particuliers, mais ce n'est pas le cas ici).
Petit conseil pour faciliter la maintenance : utilise l'opérateur sizeof pour avoir la bonne taille (cela sera dynamique).
Exemple : <ital>fgets(nom,
Je te conseille également l'utilisation de fonction pour faciliter la lecture.
Il te manque aussi le cas où l'utilisateur tape autre chose que 1 et 2 au premier essai => Il suffit de mettre le cas "default" dans le switch.
N'oublie pas non plus de mettre un '\n' en fin de tes printf. Surtout du dernier pour forcer l'affichage avant le return 0;.
Sinon pour ton erreur. C'est normal. Lorsque tu utilises : scanf("%d", ...); cela stockera un '\n' dans le buffer clavier. Le fgets() suivant lira le '\n'.
Il suffit donc de mettre un getchar(); juste après chaque scanf("%d", ...);.
Après, si tu veux faire propre, il faudrait vider le buffer systématiquement. Mais cela se complique un peu...
Cdlt,
Alors tout d'abord, je te déconseille l'utilisation de variables globales (sauf dans certains cas particuliers, mais ce n'est pas le cas ici).
Petit conseil pour faciliter la maintenance : utilise l'opérateur sizeof pour avoir la bonne taille (cela sera dynamique).
Exemple : <ital>fgets(nom,
sizeof nom</gras>, stdin);
Je te conseille également l'utilisation de fonction pour faciliter la lecture.
Il te manque aussi le cas où l'utilisateur tape autre chose que 1 et 2 au premier essai => Il suffit de mettre le cas "default" dans le switch.
N'oublie pas non plus de mettre un '\n' en fin de tes printf. Surtout du dernier pour forcer l'affichage avant le return 0;.
Sinon pour ton erreur. C'est normal. Lorsque tu utilises : scanf("%d", ...); cela stockera un '\n' dans le buffer clavier. Le fgets() suivant lira le '\n'.
Il suffit donc de mettre un getchar(); juste après chaque scanf("%d", ...);.
Après, si tu veux faire propre, il faudrait vider le buffer systématiquement. Mais cela se complique un peu...
Cdlt,