Pourquoi ça ne marchais pas?
Traçons le programme:
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.
la trace donne maintenant:
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...
Et voilà...
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
~/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);
r = scanf("%d", &x);
printf(">%d\n",x);
}while( r != 1);
la trace donne maintenant:
~/Desktop$ ./out
Bonjour!
de
>0
>0
>0
...
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;
}
#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à...
par JJ
publié dans :
Corrections