读取字符时c中的scanf错误

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

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

 w Character : w Character : 

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

它应该看起来像:

 w Character : w 

怎么做?

你错过了 &。

重试

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

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

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

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打破循环。

您的程序执行您要求它执行的操作,它会输出您键入的字符。

现在当你输入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  printf("\nCharacter :%c", TurHare); fflush(stdout); } }