Fgets non prit en compte...

[Résolu/Fermé]
Signaler
Messages postés
382
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
2 avril 2017
-
Messages postés
382
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
2 avril 2017
-
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 :

#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.

3 réponses

Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
44
Bonjour
essaye de vidé ton buffer après le scanf
à bientôt
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 787
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,
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,
Messages postés
382
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
2 avril 2017
68
Ouah ! Merci beaucoup ! Je pensais pas avoir fait autant de fautes ^^ C'est super, ça fonctionne, et je comprend mieux le fonctionnement ! :o *_*
Encore merci !! :D
Messages postés
382
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
2 avril 2017
68
Bonjour, merci de votre réponse, mais je débute, alors comment le vider ?