日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

清空输入缓存的方法

發(fā)布時(shí)間:2025/6/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 清空输入缓存的方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

緩存的清空方法

1、fflush(?stdin)?

這個(gè)可以很好得解決問(wèn)題,但不是可移植的。

MSDN?文檔里清楚地寫著fflush?on?input?stream?is?an?extension?to?the?C?standard(fflush?操作輸入流是對(duì)?C?標(biāo)準(zhǔn)的擴(kuò)充),也就是說(shuō)不是所有的編譯器都支持這么用。VC是支持的,如果不用考慮程序的移植性,用fflush(stdin)?也沒什么大問(wèn)題。

2、讀字符清空

如果不能用上面的方法,還可以考慮:while(getchar()!='\n');即一直讀緩沖區(qū),直到換行為止。這個(gè)方法如果用在數(shù)字的輸入后是很有效的,如果本來(lái)希望輸入數(shù)字,但是不小心在數(shù)字后面鍵入了個(gè)字母,這個(gè)方法能很好的解決。

但是,若是字符串的輸入,則有些棘手。fgets(name,10,stdin); while(getchar()!='\n');這個(gè)辦法就不能得到好的效果。如果字符串超過(guò)了9個(gè)字符,則程序只讀入前9個(gè)字符,后邊的字符一直到換行都被getchar()消耗掉,這正合我意,但如果鍵入的字符串加上回車不到9個(gè)字符,則程序會(huì)一直等待,直到下一個(gè)換行字符,這會(huì)影響程序的邏輯。所以,這種方法來(lái)處理輸入字符串后的緩沖區(qū),是不合適的。

針對(duì)這個(gè)問(wèn)題,我們進(jìn)行改進(jìn),改進(jìn)是基于fgets函數(shù)的特性的。

char?name[10];

fputs("enter?your?name\n",stdout);

fgets(name,10,stdin);

if(strlen(name)==9?&&?name[8]!='\n'?)

while(getchar()!='\n');

這樣,我所遇到的問(wèn)題得到解決。在第三行從緩沖區(qū)讀入最多9個(gè)字符,這時(shí)有三種情況:用戶輸入了7個(gè)或以下字符并按回車,這時(shí)數(shù)組name里的字符串長(zhǎng)度小于9,且緩沖區(qū)是空的,無(wú)需清除;

用戶輸入了8個(gè)字符并按下回車,這時(shí)數(shù)組name里字符串長(zhǎng)度為9,且name[8]為'\n',這時(shí)緩沖區(qū)也是空的,無(wú)需清除;

用戶輸入了8個(gè)以上的字符,并按回車,這時(shí)name里的字符串長(zhǎng)度為9,緩沖區(qū)不空,至少有一個(gè)'\n',且以'\n'結(jié)尾。

由以上三種情況的分析,就可以得到if(strlen(name)==9?&&?name[8]!='\n'?)這個(gè)判斷句。

轉(zhuǎn)載于:https://www.cnblogs.com/lxjsailor/archive/2012/10/06/2713022.html

總結(jié)

以上是生活随笔為你收集整理的清空输入缓存的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。