读取字符时c中的scanf错误

时间:2010-08-09 11:07:48

标签: c

#include <stdio.h>

int main()
{
    char TurHare; 

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

当我编译然后运行程序时,输出如下:

w
Character : w
Character : 

其中w是来自控制台的输入。

它应该看起来像:

w
Character : w

怎么做?

4 个答案:

答案 0 :(得分:2)

你错过了&amp;。

重试

int main()
 {
char TurHare;   

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

return 0;
} 

我建议使用getch,getche,getchar来处理字符,scanf会引导你一些缓冲问题

答案 1 :(得分:1)

好吧因为你输入w后输入的返回键。所以一旦它读取w和其他时间它读取行尾字符。

答案 2 :(得分: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打破^ D.

答案 3 :(得分: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);
    }
 }