簡體   English   中英

讀取字符時c中的scanf錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM