c scanf鍵盤緩衝區殘餘資訊問題

2021-08-31 02:06:37 字數 790 閱讀 7253

鍵盤緩衝區殘餘資訊問題 

#include

int main()

while(c!=''n'');

} scanf("%c",&c);這句不能正常接收字元,什麼原因呢?我們用printf("c=%d\n",c);將c用int表示出來,啟用printf("c=%d\n",c);這一句,看看scanf()函式賦給c到底是什麼,結果是 c=10 ,ascii值為10是什麼?換行即\n.對了,我們每擊打一下"enter"鍵,向鍵盤緩衝區發去乙個「回車」(\r),乙個「換行"(\n),在這裡\r被scanf()函式處理掉了(姑且這麼認為吧^_^),而\n被scanf()函式「錯誤」地賦給了c. 

解決辦法:可以在兩個scanf()函式之後加個fflush(stdin);,還有加getch(); getchar();也可以,但是要視具體scanf()語句加那個,這裡就不分析了,讀者自己去摸索吧。但是加fflush(stdin);不管什麼情況都可行。 

函式名: fflush 

功 能: 清除乙個流 

用 法: int fflush(file *stream); 

#include

int main()

while(c!=''n'');

}      

這裡再給乙個用「空格符」來處理緩衝區殘餘資訊的示例: 

執行出錯的程式: 

#include

int main()

} 使用了空格控制符後: 

#include

int main()

} 可以執行看看兩個程式有什麼不同。 

清除鍵盤緩衝區

關於清除鍵盤緩衝區殘餘資訊問題 迴圈scanf 可能導致直接讀入 n.include int main while c n scanf c c 這句不能正常接收字元,什麼原因呢?我們用printf c d n c 將c用int表示出來,啟用 printf c d n c 這一句,看看scanf 函式...

輸入緩衝區與輸出緩衝區

本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...

鍵盤緩衝區部分狀態表示

位址 0040 0017 bit 7 1insert on bit 6 1caps lock on bit 5 1num lock on bit 4 1scroll lock on bit 3 1alt 按下 bit 2 1ctrl 按下 bit 1 1左邊 shift 按下 bit 0 1右邊 s...