Lire une chaine

jean-pool -  
Mimiste Messages postés 1159 Statut Membre -
Bonjour,

Voici mon programme :
*
*
*
int changer() {

    int choix;
    char word1[200];
    char word[200];


    printf("entrer choix 1 ou 2\n");
    scanf("%d", &choix);


    switch(choix) {

        case 1 :
                printf("le mot 1 a changer\n");
                LireChaine1(word, 200);
        break;

        case 2 :
                printf("le mot 2 a changer\n");
                LireChaine1(word1, 200);
        break;

        }

        return 0;
}

*
*
*
*

    void LireChaine1(char chaine[], int size) {
        fgets(chaine, size, stdin);
        chaine[strlen(chaine) - 1] = '\0';
    }

*
*
*

Je veux remplacer un mot par un autre. Je demande a l'utilisateur quelle mot il veut changer.
Ensuite je fais un switch.
Mais lorsqu'il rentre dans le premier choix par exemple, il m'affiche" le mot 1 a changer" mais il me demande pas d'en rentrer un nouveau et il finit le programme. Pourtant la fonction LireChaine1 doit me demander d'en rentrer un nouveau.
Et c'est la même chose pour le choix 2.
Merci d'avance.

A voir également:

3 réponses

Mimiste Messages postés 1159 Statut Membre 206
 
salut

la raison est simple, le buffer stdin n'est pas vide quand tu arrive a ton fgets alors il ne prend pas la peine de te demander de taper quelque chose, il récupère directement le contenu de stdin

après ton scanf, appel cette fonction par exemple pour vider le buffer

void flushBuffer()
{
    int c;
    do {
        c = getchar();
    } while (c != '\n' && c != EOF);
}
0
@ur3l'$ Messages postés 17 Statut Membre 4
 
D'accord avec toi, seulement tu peut le faire en une seule instruction qui est la suivant :
fflush(stdin);

Voila ;)
0
Mimiste Messages postés 1159 Statut Membre 206
 
il ne faut pas prendre cette mauvaise habitude d'utiliser fflush(stdin), c'est une très mauvaise pratique.
En effet elle peut fonctionner mais le but de cette fonction est de vider un buffer de sortie et non pas un buffer d'entrée. C'est possible qu'elle ne fonctionne pas ou ai des comportements bizarre sur certains systèmes (elle ne fonctionnera pas sous mac par exemple). Alors autant bien commencer le C et directement utiliser quelque chose de portable et qui fonctionnera dans tous les cas ;)
0