erreur scanf en c lors de la lecture d’un caractère

#include  int main() { char TurHare; while(1) { scanf("%c",TurHare); printf("\nCharacter :%c", TurHare); } return 0; } 

Lorsque je comstack puis lance le programme, le résultat est le suivant:

 w Character : w Character : 

où w est l’entrée de la console.

Cela devrait ressembler à:

 w Character : w 

Comment faire?

Vous avez raté &.

réessayer avec

 int main() { char TurHare; while(1) { scanf("%c",&TurHare); printf("\nCharacter :%c", TurHare); } return 0; } 

Je recommande getch, getche, getchar à utiliser en cas de caractère, scanf vous mènera à un problème de mise en mémoire tampon

Ok, donc c’est à cause de la touche de retour que vous entrez après avoir entré w. ainsi, une fois qu’il lit w et un autre fois, il lit le caractère de fin de ligne.

Scanf (“% c”) pose un problème de mise en mémoire tampon. Beaucoup de gens utilisent fflush (stdin) pour résoudre, mais ce n’est pas ANSI.

 void fflushstdin() { int c; while( (c=getchar())=='\n' ); if( c!=EOF ) ungetc(c,stdin); } main() { int TurHare; while( fflushstdin(), !feof(stdin)&&1==scanf("%c",&TurHare) ) { printf("\nCharacter :%c", TurHare); } return 0; } 

Rompez la boucle avec ^ Z sous Windows et ^ D avec Unix / Linux.

Votre programme fait ce que vous lui dites, il sort les caractères que vous tapez.

Maintenant, quand vous entrez w , regardez ce que vous faites. Vous appuyez sur 2 clés. la touche w et Enter . C’est la sortie que vous obtenez, w et une nouvelle ligne (à partir de la touche Entrée). Si vous ne voulez pas cela, par exemple

 char TurHare; while(1) { if(scanf("%c",&TurHare) != 1) { //always check for errors break; //or some other error handling } if(c != '\n') { //or perhaps if(!isspace(c)) from  printf("\nCharacter :%c", TurHare); fflush(stdout); } }