Fgets non prit en compte...

Résolu/Fermé
Rhydan1 Messages postés 382 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 2 avril 2017 - 23 juil. 2014 à 13:32
Rhydan1 Messages postés 382 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 2 avril 2017 - 23 juil. 2014 à 14:32
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.
A voir également:

3 réponses

sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
23 juil. 2014 à 13:42
Bonjour
essaye de vidé ton buffer après le scanf
à bientôt
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
23 juil. 2014 à 14:15
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,
0
Rhydan1 Messages postés 382 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 2 avril 2017 70
23 juil. 2014 à 14:32
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
0
Rhydan1 Messages postés 382 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 2 avril 2017 70
23 juil. 2014 à 14:30
Bonjour, merci de votre réponse, mais je débute, alors comment le vider ?
0