在輸入語句后使用fflush(stdin);

成都創(chuàng)新互聯(lián)公司10多年成都定制網(wǎng)頁設(shè)計服務;為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及高端網(wǎng)站定制服務,成都定制網(wǎng)頁設(shè)計及推廣,對白烏魚等多個方面擁有豐富的網(wǎng)站維護經(jīng)驗的網(wǎng)站建設(shè)公司。
表示清楚標準輸入設(shè)備(即鍵盤)的緩沖區(qū)。
最簡單的是用fflush()函數(shù)。
此函數(shù)包含在stdio.h頭文件中,用來強制將緩沖區(qū)中的內(nèi)容寫入文件。
函數(shù)原型:int fflush(FILE *stream) ;
函數(shù)功能:清除一個流,即清除文件緩沖區(qū).
常用場合:
一、ff(stdin)刷新標準輸入緩沖區(qū),把輸入緩沖區(qū)里的東西丟棄
fflush(stdout)刷新標準輸出緩沖區(qū),把輸出緩沖區(qū)里的東西打印到標準輸出設(shè)備上。
二、scanf()函數(shù)接收輸入數(shù)據(jù)時,遇以下情況結(jié)束一個數(shù)據(jù)的輸入:(不是結(jié)束該scanf函數(shù),scanf函數(shù)僅在每一個數(shù)據(jù)域均有數(shù)據(jù),并按回車后結(jié) 束)。
① 遇空格、“回車”、“跳格”鍵。
② 遇寬度結(jié)束。
③ 遇非法輸入。
鍵盤緩沖區(qū)就可能有殘余信息問題。
scanf()函數(shù)應該只是掃描stdin流,這個殘存信息是在stdin中
解決就要在scanf()函數(shù)之后加個fflush(stdin)
三、寫文件的時候 不會馬上進行物理磁盤的文件讀寫,而是先寫入緩存,當緩存中內(nèi)容達到一定程度后再寫
FILE *fp=fopen("a.txt","w");
fprintf(fp,"abcdef");
fflush(fp);
flushall
添加義項?
函數(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()是C語言中的一個輸入函數(shù)。
與printf函數(shù)一樣,都被聲明在頭文件stdio.h里,因此在使用scanf函數(shù)時要加上#include stdio.h。(在有一些實現(xiàn)中,printf函數(shù)與scanf函數(shù)在使用時可以不使用預編譯命令#include stdio.h。)
函數(shù) scanf()?是格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中。scanf() 從標準輸入流stdin中讀內(nèi)容的通用子程序,可以說明的格式讀入多個字符,并保存在對應地址的變量中。
擴展資料:
scanf()用法舉例:
用scanf輸入一個整數(shù)
#includestdio.h
int main(){
int num=0;
printf(“請輸入一個個整數(shù)”);
scanf(“%d,num);
printf(“num是%d\n”,num);
scanf(“%*[^\n]”);
scanf(“%*c”);//清空緩沖區(qū)
printf(“請輸入一個個整數(shù)”);
scanf(“%d,num);
printf(“num是%d\n”,num);
return 0;
}
參考資料來源:百度百科-scanf
有時候需要先調(diào)用cin n來輸入一個數(shù)n,然后再調(diào)用getline(cin,string s)來獲取n行輸入。
在這種情況下,在調(diào)用cin和getline之間必須清空輸入緩沖區(qū),否則getline會把調(diào)用cin時最后輸入的換行符讀入。
清空緩沖區(qū)的方法:調(diào)用cin.ignore( )函數(shù),最好是先調(diào)用cin.clear( )函數(shù)再調(diào)用cin.ignore( )函數(shù)。
cin.ignore( int a,char c)函數(shù)定義:不斷從輸入流cin中提取字符然后忽略提取到的字符,直到遇到字符c或者提取到的字符個數(shù)達到a為止。換句話說,這個函數(shù)清空輸入流cin中字符c(包括字符c)之前的字符,或者清空了a個字符都沒有遇到字符c也結(jié)束。一般為了只讓第二個參數(shù)起作用,我們把第一個參數(shù)設(shè)為一個很大的數(shù)(比如INT_MAX)。而第二個參數(shù)常設(shè)為“\n”,也就是換行符,這樣我們可以清空輸入流cin中換行符(包括換行符)之前的所有字符。
cin.ignore()函數(shù)的默認參數(shù)為,1和“EOF”,即默認形式為cin.ignore(1, EOF),把EOF前的1個字符清掉,沒有遇到EOF就清掉一個字符然后結(jié)束。
while(getchar()!='n'); -- 應當是 while(getchar()!='\n'); 這是不斷循環(huán)取字符,直到取到 Enter 鍵時結(jié)束循環(huán)。作用,清除上面一次輸入時殘留在輸入流中的字符。
改用 fflush(stdin); 更佳。
ret = scanf("%d,%d",a,b); ret 為成功讀得的數(shù)據(jù)個數(shù)。
清除的緩沖區(qū)中的殘留數(shù)據(jù): if (ret != 2) fflush(stdin);
標題名稱:清空緩沖區(qū)的函數(shù)c語言 c++清空緩沖區(qū)函數(shù)
本文鏈接:http://chinadenli.net/article20/hhjhjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、品牌網(wǎng)站制作、App設(shè)計、網(wǎng)站導航、動態(tài)網(wǎng)站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)