Correction 1: scanf

Publié le par JJ

Pourquoi ça ne marchais pas?

Traçons le programme:

~/Desktop$ gcc -Wall -ansi -pedantic code.c -o out
~/Desktop$ ./out
Bonjour!
123
lu :123
valeur de retour:1
~/Desktop$ ./out
Bonjour!
dz
fez
123

des

Visiblement c'est un problement de scanf() ... inserons une ligne de code d'affichage pour savoir si on bloque sur scanf ou si on bloucle sans arrêt.

do{
         r = scanf("%d", &x);
         printf(">%d\n",x);
}while( r != 1);

la trace donne maintenant:

~/Desktop$ ./out
Bonjour!
de
>0
>0
>0
...

C'est donc que scanf échoue dans sa lecture et renvoie 0 et recommence à lire le buffer clavier pour échouer de nouveau.

le buffer clavier n'est donc jamais vidé.

Que faire? on lis cet article sur developpez.com et on obtiens finalement le code suivant...


#include "stdlib.h"
#include "stdio.h"

int main (){   
    int x,r;
    int c;
    printf("Bonjour!\n");

    do{
         r = scanf("%d", &x);
         while ((c = getchar()) != 'n' && c != EOF); /* mange le tampon */
     }while( r != 1);
 
    printf("lu :%d\n",x);
    printf("valeur de retour:%d\n", r);

    return 0;
}

Et voilà...

Publié dans Corrections

Commenter cet article