2010-08-09 56 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打破循環。