C comme JerikoJerk

 

.:::: Spam ::::.

Inscription à la newsletter
 

Jeudi 9 mars 2006
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à...
 
 
Blog : Sport sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur avec TF1 Network - Signaler un abus