flushall
創(chuàng)新互聯(lián)專注于內(nèi)江企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。內(nèi)江網(wǎng)站建設(shè)公司,為內(nèi)江等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
添加義項(xiàng)?
函數(shù)名:?flushall
功?能:?清除所有緩沖區(qū)
用?法:?int?flushall(void);
程序例:
#include?stdio.h
int?main(void)
{
FILE?*stream;
/*?create?a?file?*/
stream?=?fopen("DUMMY.FIL",?"w");
/*?flush?all?open?streams?*/
printf("%d?streams?were?flushed.\n",
flushall());
/*?close?the?file?*/
fclose(stream);
return?0;
}
scanf("%*[^\n]");
^取反或者“非”,[^\n]就是除了回車什么都可以被scanf讀到。*表示被讀到了但是不把讀到值或者字符賦值給任何變量。
%*[^\n]就是讀取來(lái)自鍵盤的出去回車外的任意字符,并不賦值給變量。
scanf("%*c");
就一個(gè)*,和上邊表示一樣就是讀到了不賦值給任何變量。
再看,scanf("%[^\n]%*c",str)讀入一行字符,賦值給str變量。如果c前面沒有*,那么就需要str后面再寫一個(gè)char類型的ch。這就告訴*表示讀到了但是不賦值給任何變量。
那么scanf("%*[^\n]%*c")這句話,應(yīng)該能理解了,兩個(gè)格式控制符里面都有*,就是都讀到了都不賦值變量。
讀到這里應(yīng)該差不多理解了,就是題中的兩句scanf(相當(dāng)于scanf("%*[^\n]%*c"))讀到了輸入的abc,但是沒有賦值給任何變量。然后到了gets(str4);讀到了def賦值給str4,然后printf("%s\n", str4);后必然顯示def。
清空緩存區(qū)用fflush(stdin);這句代碼。
鍵盤輸入的東西都是放在緩沖區(qū)的這款區(qū)域,有變量過來(lái)了就帶走,沒有變量就在那里呆著等待一個(gè)變量來(lái)帶它走。但是這個(gè)時(shí)候緩沖區(qū)里面偶爾會(huì)有一些垃圾的字符,而影響了正常的輸入,有的時(shí)候用getchar()帶走一個(gè)兩個(gè)的字符,但是如果還是不見效一句fflush(stdin);就可以了。
fflush()函數(shù)是標(biāo)準(zhǔn)的作法。
scanf("%*[^\n]%*c")是用掃描集將緩沖區(qū)中的字符全部讀取來(lái)實(shí)現(xiàn)清除緩沖區(qū)的動(dòng)作。
%*〔^\n〕將逐個(gè)讀取緩沖區(qū)中的'\n'字符之前的其它字符,%后面的*表示將讀取的這些字符丟棄,前遇到'\n'字符時(shí)便停止讀取操作,此時(shí),緩沖區(qū)中尚有一個(gè)'\n'字符遺留,所以后面的%*c將讀取并丟棄這個(gè)遺留的換行符,這里的星號(hào)和前面的星號(hào)作用相同。由于所有從鍵盤的輸入都是以回車結(jié)束的,而回車會(huì)產(chǎn)生一個(gè)'\n'字符,所以將'\n'連同它之前的字符全部讀取并丟棄之后,也就相當(dāng)于清除了輸入緩沖區(qū)。
最簡(jiǎn)單的是用fflush()函數(shù)。
此函數(shù)包含在stdio.h頭文件中,用來(lái)強(qiáng)制將緩沖區(qū)中的內(nèi)容寫入文件。
函數(shù)原型:int
fflush(FILE
*stream)
;
函數(shù)功能:清除一個(gè)流,即清除文件緩沖區(qū).
常用場(chǎng)合:
一、ff(stdin)刷新標(biāo)準(zhǔn)輸入緩沖區(qū),把輸入緩沖區(qū)里的東西丟棄
fflush(stdout)刷新標(biāo)準(zhǔn)輸出緩沖區(qū),把輸出緩沖區(qū)里的東西打印到標(biāo)準(zhǔn)輸出設(shè)備上。
二、scanf()函數(shù)接收輸入數(shù)據(jù)時(shí),遇以下情況結(jié)束一個(gè)數(shù)據(jù)的輸入:(不是結(jié)束該scanf函數(shù),scanf函數(shù)僅在每一個(gè)數(shù)據(jù)域均有數(shù)據(jù),并按回車后結(jié)
束)。
①
遇空格、“回車”、“跳格”鍵。
②
遇寬度結(jié)束。
③
遇非法輸入。
鍵盤緩沖區(qū)就可能有殘余信息問題。
scanf()函數(shù)應(yīng)該只是掃描stdin流,這個(gè)殘存信息是在stdin中
解決就要在scanf()函數(shù)之后加個(gè)fflush(stdin)
三、寫文件的時(shí)候
不會(huì)馬上進(jìn)行物理磁盤的文件讀寫,而是先寫入緩存,當(dāng)緩存中內(nèi)容達(dá)到一定程度后再寫
FILE
*fp=fopen("a.txt","w");
fprintf(fp,"abcdef");
fflush(fp);
網(wǎng)站題目:c語(yǔ)言中清除緩存函數(shù) c語(yǔ)言中清空緩存的函數(shù)
分享鏈接:http://muchs.cn/article26/doegicg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化、網(wǎng)站建設(shè)、域名注冊(cè)、網(wǎng)站改版、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)