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
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:
* convertir un entier en chaine
* coder un tableau en C
* chronométrer le code
* problèmes lors de la compilation avec make
* coder un tableau en C
* chronométrer le code
* problèmes lors de la compilation avec make
-> exercices sur le C
* exo 1 scanf (correction)
* exo 2 tableaux (correction)
* exo 3 Gestion Entree-Sortie (correction)
* exo 4 Passage d'arguments à main(...) (correction)
* exo 5 Conditions && compilation
* exo 2 tableaux (correction)
* exo 3 Gestion Entree-Sortie (correction)
* exo 4 Passage d'arguments à main(...) (correction)
* exo 5 Conditions && compilation
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.
Je vais recentrer mon activité sur le code. Je laisse les messages sur le serveur.. mais bon, je ne me suis pas convaincu.
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