[英]scanf error in c while reading a character
#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
怎么做?
你錯過了 &。
重試
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和換行符(從enter鍵)。 如果您不想這樣做,請例如
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.