Problème de lecture au clavier en C
Yakurena
Messages postés
47
Date d'inscription
Statut
Membre
Dernière intervention
-
Cmanu -
Cmanu -
Bonsoir,
J'ai remarqué que la lecture au clavier, en langage C, pose souvent des problèmes, surtout dans le cas de la lecture d'entiers : quand on doit entrer un entier au clavier, et que celui qui execute le programme tape quelque chose avec au moins une lettre,l'entier prend une valeur bizarre(toujours la même : 1075028800).
Mais c'est encore pire quand la lecture de l'entier se situe dans une boucle : dans ce cas,il suffit de lire une fois une mauvaise valeur au clavier pour le programme boucle ensuite indéfiniment sans jamais rendre la main à l'utilisateur.
Le programme ci-dessous est censé lire un entier au clavier jusqu'à ce que cette valeur lue soit égale à 0.
******************************************************
#include<stdio.h>
main()
{ int entier; float reel; char caractere;char* chaine;
do {
puts("Entrez un entier : 0 pour arreter");
scanf("%d",&entier);
printf("entier = %d\n",entier);
} while(entier); exit(0);
******************************************************
Lorsque je l'execute et que j'entre,par exemple, abc, voici les resultats de l'execution :
******************************************************
Entrez un entier : 0 pour arreter
entier = 1075028800
Entrez un entier : 0 pour arreter
entier = 1075028800
Entrez un entier : 0 pour arreter
entier = 1075028800
Entrez un entier : 0 pour arreter
entier = 1075028800
Entrez un entier : 0 pour arreter
entier = 1075028800
............................................. (et ceci des centaines de fois)
*****************************************************
En Java, ce problème est evitable grace à l'exception declenchée lors de l'appel de la méthode parseInt,mais en C, je ne vois pas du tout comment résoudre le problème. Si qqn pouvait me dépanner...
Merci d'avance.
J'ai remarqué que la lecture au clavier, en langage C, pose souvent des problèmes, surtout dans le cas de la lecture d'entiers : quand on doit entrer un entier au clavier, et que celui qui execute le programme tape quelque chose avec au moins une lettre,l'entier prend une valeur bizarre(toujours la même : 1075028800).
Mais c'est encore pire quand la lecture de l'entier se situe dans une boucle : dans ce cas,il suffit de lire une fois une mauvaise valeur au clavier pour le programme boucle ensuite indéfiniment sans jamais rendre la main à l'utilisateur.
Le programme ci-dessous est censé lire un entier au clavier jusqu'à ce que cette valeur lue soit égale à 0.
******************************************************
#include<stdio.h>
main()
{ int entier; float reel; char caractere;char* chaine;
do {
puts("Entrez un entier : 0 pour arreter");
scanf("%d",&entier);
printf("entier = %d\n",entier);
} while(entier); exit(0);
******************************************************
Lorsque je l'execute et que j'entre,par exemple, abc, voici les resultats de l'execution :
******************************************************
Entrez un entier : 0 pour arreter
entier = 1075028800
Entrez un entier : 0 pour arreter
entier = 1075028800
Entrez un entier : 0 pour arreter
entier = 1075028800
Entrez un entier : 0 pour arreter
entier = 1075028800
Entrez un entier : 0 pour arreter
entier = 1075028800
............................................. (et ceci des centaines de fois)
*****************************************************
En Java, ce problème est evitable grace à l'exception declenchée lors de l'appel de la méthode parseInt,mais en C, je ne vois pas du tout comment résoudre le problème. Si qqn pouvait me dépanner...
Merci d'avance.
A voir également:
- Problème de lecture au clavier en C
- Télécharger clavier arabe - Télécharger - Divers Web & Internet
- Clavier de l'ordinateur - Guide
- Comment taper / sur clavier - Guide
- Changer clavier qwerty en azerty - Guide
- Confirmation de lecture whatsapp - Guide
5 réponses
Salut,
#include<stdio.h> main() { int entier; do { printf("Entrez un entier (0 pour arreter) : "); scanf("%d",&entier); printf("entier = %d\n",entier); } while(entier != 0); }
man scanf SYNOPSIS #include <stdio.h> int scanf(const char *format, ...); int fscanf(FILE *stream, const char *format, ...); [...] RETURN VALUE These functions return the number of input items assigned, which can be fewer than provided for, or even zero, in the event of a matching failure. Zero indicates that, while there was input available, no conversions were assigned; typically this is due to an invalid input character, such as an alphabetic character for a `%d' conversion. The value EOF is returned if an input failure occurs before any conver- sion such as an end-of-file occurs. If an error or end-of-file occurs after conver- sion has begun, the number of conversions which were successfully completed is returned.
Bonne chance ;)
je te conseil:
1 de ne pas faire une saisie d'entier directement mais de recuperer le resultat sous forme de charactere et ensuite de tester si c'est bien un entier puis le convertir en entier.
2 de vider ton buffer de clavier avec la commande fflush
1 de ne pas faire une saisie d'entier directement mais de recuperer le resultat sous forme de charactere et ensuite de tester si c'est bien un entier puis le convertir en entier.
2 de vider ton buffer de clavier avec la commande fflush
ce normal que vous tombait dans un boucle infinit car votre condition d'arrét(while(entier)) est fausse éssayé de nouveau avec ces instruction :
do
....
while(entier=0)
// bon chance
do
....
while(entier=0)
// bon chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question