2010-08-09 7 views
0
#include <stdio.h> 

int main() 
{ 
    char TurHare; 

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

Lorsque je compile et ensuite exécuter le programme, la sortie est similaire:erreur de scanf en c en lisant un caractère

w 
Character : w 
Character : 

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

Il doit apparaître comme:

w 
Character : w 

Comment le faire?

Répondre

2

Vous avez manqué &.

nouvelle tentative 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

+0

cela ne fonctionne toujours pas. Je veux dire qu'il devrait être et seulement mais j'ai collé le code incorrect ici. Désolé. – higherDefender

+0

try getch(), getchar(), getche() scanf montre quelques problèmes avec la chaîne et les caractères. char c = getchar(); –

+0

oui lorsque vous appuyez sur la touche enter, la touche d'entrée est entrée dans stdin et la prochaine fois qu'elle se trouve dans stdin, elle ne fonctionne pas comme elle le devrait –

1

Ok, donc sa raison de clé de retour que vous entrez après entrer w. donc une fois qu'il lit w et l'autre fois il a lu le caractère de fin de ligne.

0

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

Maintenant, lorsque vous entrez w, regardez ce que vous faites. Vous frappez 2 touches. la touche w et Enter. C'est la sortie que vous obtenez, w et un retour à la ligne (à partir de la touche d'entrée). Si vous ne le souhaitez pas, 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 <ctype.h> 
     printf("\nCharacter :%c", TurHare); 
     fflush(stdout); 
    } 
} 
1

Il existe un problème de mise en mémoire tampon avec scanf ("% c"). Beaucoup de gens utilisent fflush (stdin) pour résoudre, mais ne sont 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; 
} 

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

Questions connexes