#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
怎么做?
答案 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);
}
}