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

int main() 
{ 
    char TurHare; 

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

当我编译,然后运行该程序的输出是这样的:scanf的错误,而读一字符

w 
Character : w 
Character : 

其中w是从控制台输入。

它应该出现像:

w 
Character : w 

怎么办呢?

回答

2

您错过了&。

重试与

int main() 
{ 
char TurHare; 

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

return 0; 
} 

我推荐残培,getche,getchar使字符的情况下使用,scanf函数会带你到一些缓冲的问题

+0

它仍然不起作用。我的意思是它应该是&只,但我在这里贴错了代码。对不起。 – higherDefender 2010-08-09 11:15:46

+0

尝试getch(),getchar(),getche()scanf显示字符串和字符的一些问题。 char c = getchar(); – 2010-08-09 11:23:22

+0

是的,当你按下输入它在stdin队列输入密钥,下一次它从标准输入提取,因此它不工作,因为它应该 – 2010-08-09 11:34:43

1

好了,所以你以后进入,因为回车键的其进入w。所以一旦读取w和其他时间它读取行结束字符。

0

你的程序做你告诉它做的事,它输出你输入的字符。

现在,当你输入w时,看看你在做什么。你打2个键。 w密钥和Enter。这是你得到的输出,w和一个换行符(从回车键)。如果你不想这样做,例如

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

scanf(“%c”)存在缓冲问题。许多人使用fflush(stdin)来解决,但不是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; 
} 

在Windows和^ Z上用Unix/Linux打破循环。