當前位置:首頁 » 文件管理 » c清空緩存區

c清空緩存區

發布時間: 2022-10-23 21:09:44

『壹』 C語言中清空緩沖區問題

奇怪的問題!
scanf中*的作用之一是忽略掉指定的內容, 比如 scanf ("%d %*s %d", &i, &k),輸入12 aaa 34,執行後i = 12, k = 34, aaa被忽略掉。這個與緩沖區有關系嗎?
scanf ("%*」, buf); //這條語句忽略掉輸入的任何字元(\n不忽略)。
至於這條語句scanf("%*^[\n]");連\n也忽略掉了, 程序直接終止在scanf,唯一的方法就是發送sigkill信號終止程序了。

『貳』 C語言中清除緩沖區很重要嗎

如果緩沖區是在棧里分配的話是不需要清除的,因為系統會幫你做這個工作,但是如果緩沖區是分配在堆里的話就要自己手動清除了,不然會發生內存泄露,就是雖然不使用,但佔用的資源仍然不能釋放,會影響系統性能。

清除緩沖區有三種方法:
方法一:
fflush(stdin);
fflush(stdin)在VC上可以使用,但是其他編譯器不能保證對fflush的實現。
方法二:
setbuf(stdin, NULL);
setbuf(stdin, NULL);是使stdin輸入流由默認緩沖區轉為無緩沖區。但緩沖區沒有了。
方法三:
char ch;while((ch = getchar()) != '\n' && ch != EOF);
這種方法是最好的方法,因為它使用的是C語言的基本語法,在什麼情況都是支持的。

『叄』 C語言中如何清空輸入輸出緩沖區

最簡單的是用fflush()函數。
此函數包含在stdio.h頭文件中,用來強制將緩沖區中的內容寫入文件。
函數原型:int
fflush(FILE
*stream)
;
函數功能:清除一個流,即清除文件緩沖區.
常用場合:
一、ff(stdin)刷新標准輸入緩沖區,把輸入緩沖區里的東西丟棄
fflush(stdout)刷新標准輸出緩沖區,把輸出緩沖區里的東西列印到標准輸出設備上。
二、scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數,scanf函數僅在每一個數據域均有數據,並按回車後結
束)。

遇空格、「回車」、「跳格」鍵。

遇寬度結束。

遇非法輸入。
鍵盤緩沖區就可能有殘余信息問題。
scanf()函數應該只是掃描stdin流,這個殘存信息是在stdin中
解決就要在scanf()函數之後加個fflush(stdin)
三、寫文件的時候
不會馬上進行物理磁碟的文件讀寫,而是先寫入緩存,當緩存中內容達到一定程度後再寫
FILE
*fp=fopen("a.txt","w");
fprintf(fp,"abcdef");
fflush(fp);

『肆』 C語言中清除內存緩沖區的函數是什麼

是I/O 函數分為「帶緩沖」的和「不帶緩沖」的兩類。

帶緩沖的 I/O 函數寫數據時,並不直接寫磁碟介質,而是將數據先寫到這塊內存緩沖中,之後用戶空間緩沖中的數據會被傳送到系統緩沖中。

linux 內核會將系統緩沖中的數據送完磁碟驅動器(fsync函數可以加速這一過程),這之後,數據才真正的被寫入磁碟。

因為目前內存的讀寫速度往往遠大於硬碟的讀寫速度(常 ms 級)。因此,緩沖區的建立可以盡力避免太過頻繁的寫磁碟。

對於硬碟來說,寫入一個位元組可能跟寫入一個扇區沒什麼兩樣,程序員每次寫入的數據也許就幾個位元組,所以可以將每次寫入的幾個位元組放入緩沖區,排列組合成一整塊數據再寫入,也能極大的提升效率。

(4)c清空緩存區擴展閱讀

1、帶緩沖的 I/O 讀函數讀取數據之前,則會首先判斷用戶空間的進程緩沖區是否包含數據,如果沒有,則繼續判斷系統緩沖區是否包含數據。

2、「帶緩沖」的 I/O 讀函數從磁碟讀取數據時,並不只讀取調用者指定的讀取位元組數。讀函數可能一次性讀取一個扇區(常常是 512B)保存在緩沖區里,只返回給程序員需要的 10 位元組。

『伍』 C語言中如何清空輸入輸出緩沖區

最簡單的是用fflush()函數。
此函數包含在stdio.h頭文件中,用來強制將緩沖區中的內容寫入文件。
函數原型:int fflush(FILE *stream) ;
函數功能:清除一個流,即清除文件緩沖區.
常用場合:
一、ff(stdin)刷新標准輸入緩沖區,把輸入緩沖區里的東西丟棄

fflush(stdout)刷新標准輸出緩沖區,把輸出緩沖區里的東西列印到標准輸出設備上。
二、scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數,scanf函數僅在每一個數據域均有數據,並按回車後結 束)。
① 遇空格、「回車」、「跳格」鍵。
② 遇寬度結束。
③ 遇非法輸入。
鍵盤緩沖區就可能有殘余信息問題。
scanf()函數應該只是掃描stdin流,這個殘存信息是在stdin中
解決就要在scanf()函數之後加個fflush(stdin)

三、寫文件的時候 不會馬上進行物理磁碟的文件讀寫,而是先寫入緩存,當緩存中內容達到一定程度後再寫
FILE *fp=fopen("a.txt","w");
fprintf(fp,"abcdef");
fflush(fp);

『陸』 C語言中gets()函數和清空緩沖區問問題

scanf("%*[^\n]");
^取反或者「非」,[^\n]就是除了回車什麼都可以被scanf讀到。*表示被讀到了但是不把讀到值或者字元賦值給任何變數。
%*[^\n]就是讀取來自鍵盤的出去回車外的任意字元,並不賦值給變數。
scanf("%*c");
就一個*,和上邊表示一樣就是讀到了不賦值給任何變數。

再看,scanf("%[^\n]%*c",str)讀入一行字元,賦值給str變數。如果c前面沒有*,那麼就需要str後面再寫一個char類型的ch。這就告訴你*表示讀到了但是不賦值給任何變數。
那麼scanf("%*[^\n]%*c")這句話,應該能理解吧,兩個格式控制符裡面都有*,就是都讀到了都不賦值變數。

讀到這里你應該差不多理解了,就是你的題中的兩句scanf(相當於scanf("%*[^\n]%*c"))讀到了你輸入的abc,但是沒有賦值給任何變數。然後到了gets(str4);讀到了def賦值給str4,然後printf("%s\n", str4);後必然顯示def。

清空緩存區用fflush(stdin);這句代碼。
鍵盤輸入的東西都是放在緩沖區的這款區域,有變數過來了就帶走,沒有變數就在那裡呆著等待一個變數來帶它走。但是這個時候緩沖區裡面偶爾會有一些垃圾的字元,而影響了正常的輸入,有的時候用getchar()帶走一個兩個的字元,但是如果還是不見效一句fflush(stdin);就可以了。

『柒』 c++中怎麼清除輸出緩沖區

c++中使用cin.sync來清除緩存區的數據流的。如果標示符沒有改變那麼即使清除了數據流也無法輸入。所以cin.clear()和cin.sync()要聯合起來使用。
對於cin.clear()和cin.sync()參考以下程序:
#include<iostream>
using namespace std;
intmain()
{
int a;
cout<<"輸入一個字母:"<<endl;
cin>>a; //int型變數中放了char型數據,failbit置1
cout<<"cin.fail()="<<cin.fail()<<endl; //輸出1
//cin.clear();
//cin.sync();
cout<<"輸入一個數字:"<<endl; //由於failbit值為1,輸入流不能正常工作
cin>>a; //故此處的輸入無效
cout<<a<<endl; //輸出不確定值
cin.clear(); //此處用cin.clear()流標志復位
//cin.sync();
cout<<"cin.fail()="<<cin.fail()<<endl; //此處failbit已為0
cout<<"輸入一個數字:"<<endl;
//但剛才輸入的字元並沒有從流中清除,所以cin>>a又把那個字元放入a中,流輸入流又不能正常工作
cin>>a;
cout<<a<<endl; //輸出不確定值
cout<<"cin.fail()="<<cin.fail()<<endl; //在此處failbit又為1
cin.clear(); //再次修復輸入流
cin.ignore(); //取走剛才流中的字元
cout<<"輸入一個數字:"<<endl; //再次接收用記輸入,這次輸入數字,正常輸出了
cin>>a;
cout<<"a="<<a<<endl;
//現在再看一下輸入流的failbit
cout<<"cin.fail()="<<cin.fail()<<endl;//輸出0,表明輸入流已恢復正常
return 0;
}

熱點內容
問道刷道隊伍怎麼配置 發布:2024-10-07 12:09:17 瀏覽:321
androidservice使用 發布:2024-10-07 12:00:01 瀏覽:261
樂視2安卓版本怎麼升級 發布:2024-10-07 11:51:11 瀏覽:696
方舟電腦版怎麼進入官方伺服器 發布:2024-10-07 11:09:32 瀏覽:805
百度雲快速上傳 發布:2024-10-07 10:52:25 瀏覽:480
java島嶼 發布:2024-10-07 10:29:25 瀏覽:971
qq會員的密碼是多少 發布:2024-10-07 10:26:03 瀏覽:761
訪問源伺服器ip 發布:2024-10-07 10:24:31 瀏覽:55
腳本整理 發布:2024-10-07 10:20:48 瀏覽:234
圖片上傳功能java 發布:2024-10-07 10:14:18 瀏覽:129