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

sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
Bonjour
essaye de vidé ton buffer après le scanf
à bientôt
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 391 Date d'inscription   Statut Membre Dernière intervention   70
 
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 391 Date d'inscription   Statut Membre Dernière intervention   70
 
Bonjour, merci de votre réponse, mais je débute, alors comment le vider ?
0