c語言清空緩沖區
A. c語言中清空緩沖區問題
奇怪的問題!
scanf中*的作用之一是忽略掉指定的內容, 比如 scanf ("%d %*s %d", &i, &k),輸入12 aaa 34,執行後i = 12, k = 34, aaa被忽略掉。這個與緩沖區有關系嗎?
scanf ("%*」, buf); //這條語句忽略掉輸入的任何字元(\n不忽略)。
至於這條語句scanf("%*^[\n]");連\n也忽略掉了, 程序直接終止在scanf,唯一的方法就是發送sigkill信號終止程序了。
B. 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. C語言中的清空鍵盤緩沖區的fflusf(stdin)在哪些情況下可以不用
能用到這個函數說明你已經不是入門階段了,講起來會輕松一點。在你要按確定的格式讀東西,但是鍵盤緩沖區里可能還有在上次讀入後用戶按下的其他的按鍵信息,如果讀了這些信息必然得不到正確的輸入信息,所以這是要清空鍵盤緩沖區。有時,在需要忽略用戶的部分輸入或其他一些情況下也要情況輸入緩沖區。 舉個例子:你的程序在完成了某個持續一定時間的計算之後,需要用戶輸入一些信息以進行下一步操作的時候,就要先清空輸入緩沖區,再讀用戶輸入信息。因為在你的程序進行上一次運算期間,用戶很可能有意無意的按了鍵盤,(這里請注意按一個鍵和這個鍵對應的內容在屏幕上顯示出來時兩回事)這些按鍵雖然沒有顯示出來,但是已經存在了鍵盤緩沖區中,下一次讀入操作會讀到這些按鍵,這並不是我們想要的。
D. C語言中「fflush(stdin)」的作用是什麼
清除標准輸入設備(一般是鍵盤)的緩存。
scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數,scanf函數僅在每一個數據域均有數據,並按回車後結束)。
① 遇空格、「回車」、「跳格」鍵。
② 遇寬度結束。
③ 遇非法輸入。
鍵盤緩沖區就可能有殘余信息問題。
scanf()函數應該只是掃描stdin流,這個殘存信息是在stdin中
解決就要在scanf()函數之後加個fflush(stdin)。
flush(stdin)刷新標准輸入緩沖區,把輸入緩沖區里的東西丟棄
fflush(stdout)刷新標准輸出緩沖區,把輸出緩沖區里的東西列印到標准輸出設備上。
E. c語言,scanf函數,在輸入一個數據時,如何使數據進去緩沖區
關於清空緩沖區,舉例如下:
#include<stdio.h>
intmain()
{
intx;
scanf("%d",&x);
fflush(stdin);//清空輸入緩沖
scanf("%d",&x);//清空緩沖區後繼續輸入
printf("%d ",x);
return0;
}
F. C語言中清除緩沖區很重要嗎
如果緩沖區是在棧里分配的話是不需要清除的,因為系統會幫你做這個工作,但是如果緩沖區是分配在堆里的話就要自己手動清除了,不然會發生內存泄露,就是雖然不使用,但佔用的資源仍然不能釋放,會影響系統性能。
清除緩沖區有三種方法:
方法一:
fflush(stdin);
fflush(stdin)在VC上可以使用,但是其他編譯器不能保證對fflush的實現。
方法二:
setbuf(stdin, NULL);
setbuf(stdin, NULL);是使stdin輸入流由默認緩沖區轉為無緩沖區。但緩沖區沒有了。
方法三:
char ch;while((ch = getchar()) != '\n' && ch != EOF);
這種方法是最好的方法,因為它使用的是C語言的基本語法,在什麼情況都是支持的。
G. C語言 清除緩沖區的非法字元為什麼要用while
只是讓你方便吧
比如有很多非法字元一次清理不完所以就不斷重復
while
loop
直到清除完了
還有很多方法啊比如exception
handing,
recursion
等等
H. 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);
I. 在C語言編程中什麼時候需要用fflush(stdin)
fflush函數刷新一個流,可以用來防止內存地址已經占滿,當把這個流指向用戶標准輸入(stdin)時,可以清除目前緩沖區中的內容,輸入回車也會被清楚掉,例如,在scanf()之後使用fflush(stdin)是當輸入緩沖區(內存)滿了的時候,自動清除輸入流緩沖區中所有數據,其實現在內存這么大,每次輸入的數據只有幾個位元組,是幾乎用不上的,多用上的地方是在嵌入式開發上面,因為每個固化晶元上一般只有幾十K的空間,所以空間顯得非常重要,此時就要用上了
J. C語言中清除內存緩沖區的函數是什麼
C語言中清除內存緩沖區的函數是fflush(
),清除輸入緩沖區用fflush(stdin);
其中stdin表示標准輸入。
該函數通常用在輸入類函數的前面,用以清除輸入緩沖區中的內容,避免接收到上次殘留的內容而出錯。
舉例如下:
1、不加fflush函數:
// 將輸入的5個字元存放到數組str中,並輸出
int i;
char ch, str[6]={'\0'};
for(i=0; i<5; i++)
{
scanf("%c", &ch);
str[i] = ch;
}
printf("%s\n", str);
// 程序只能輸入三個字元(每個字元間包含一個回車符),因為不加fflush函數時,將殘留在緩沖區中的回車符也當成了一個字元輸入到數組str中。
2、加fflush函數:
int i;
char ch, str[6]={'\0'};
for(i=0; i<5; i++)
{
fflush(stdin); // 清除留在緩沖區中的回車符,確保接收到的是用戶輸入的字元
scanf("%c", &ch);
str[i] = ch;
}
printf("%s\n", str);
// 程序能正常輸出