C comme JerikoJerk

 

.:::: Spam ::::.

Inscription à la newsletter
 

Bienvenue - Willkommen - Wellcome !


SUR LE C et bientôt sur le C++
Je propose des articles et des exercices pour montrer ce qu'on peut faire face à des questions simples, généralement posées par...

-> divers - how to...
à retenir:

-> exercices sur le C
 


SUR LES RESEAUX
Je vais recentrer mon activité sur le code. Je laisse les messages sur le serveur.. mais bon, je ne me suis pas convaincu.



SUR MOI
Parce que j'aime bien raconter ma vie.
..


-> Jérikojerk



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à...
 
 
Créer un blog sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur avec TF1 Network - Signaler un abus