免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

c語言fflush函數(shù) c語言中ff

C語言fflush(stdin)函數(shù)是什么意思,在什么情況下用它

1、fflush(stdin)是清空輸入緩沖區(qū)的意思。stdin就是標(biāo)準(zhǔn)輸入 std即standard(標(biāo)準(zhǔn)),in即input(輸入),合起來就是標(biāo)準(zhǔn)輸入。 一般就是指鍵盤輸入到緩沖區(qū)里的東西。

甘德網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),甘德網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為甘德近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個(gè)售后服務(wù)好的甘德做網(wǎng)站的公司定做!

2、在清除文件緩沖區(qū)時(shí)使用,文件以寫方式打開時(shí)將緩沖區(qū)內(nèi)容寫入文件。

例:

#include conio.h

#include io.h

#include stdio.h

#include string.h

void flush(FILE *stream);

int main(void)

{

FILE *stream;

char msg[] = "This is a test";

/* create a file */

stream = fopen("DUMMY.FIL", "w");

/* write some data to the file */

fwrite(msg, strlen(msg), 1, stream);

clrscr();

printf("Press any key to flush DUMMY.FIL:");

getch();

/* flush the data to DUMMY.FIL without closing it */

flush(stream);

printf("\nFile was flushed, Press any key to quit:");

getch();

return 0;

}

void flush(FILE *stream)

{

int duphandle;

/* flush the stream's internal buffer */

fflush(stream);

/* make a duplicate file handle */

duphandle = dup(fileno(stream));

/* close the duplicate handle to flush the DOS buffer */

close(duphandle);

}

擴(kuò)展資料

使用fflush的注意事項(xiàng)

1、MSDN 文檔里也清楚地寫著:fflush on input stream is an extension to the C standard (fflush 操作輸入流是對C標(biāo)準(zhǔn)的擴(kuò)充)。以下是 C99 對 fflush 函數(shù)的定義:int fflush(FILE *stream);

2、如果stream指向輸出流或者更新流(update stream),并且這個(gè)更新流最近執(zhí)行的操作不是輸入,那么fflush函數(shù)將把任何未被寫入的數(shù)據(jù)寫入stream指向的文件(如標(biāo)準(zhǔn)輸出文件stdout)。

3、fflush函數(shù)的行為是不確定的。fflush(NULL)清空所有輸出流和上面提到的更新流。如果發(fā)生寫錯(cuò)誤,flush函數(shù)會(huì)給那些流打上錯(cuò)誤標(biāo)記,并且返回EOF,否則返回0。

4、如果 stream 指向輸入流(如 stdin),那么 fflush 函數(shù)的行為是不確定的。故而使用 fflush(stdin) 是不正確的。

參考資料來源:百度百科—fflush(stdin)

C語言fflush(stdin);的用法

首先請看以下程序:

#include stdio.h

int main( void )

{

int i;

for (;;)

{

fputs("Please input an integer: ", stdout);

scanf("%d", i);

printf("%d\n", i);

}

return 0;

}

這個(gè)程序首先會(huì)提示用戶輸入一個(gè)整數(shù),然后等待用戶輸入,如果用戶輸入的是整數(shù),程序會(huì)輸出剛才輸入的整數(shù),并且再次提示用戶輸入一個(gè)整數(shù),然后等待用戶輸入。但是一旦用戶輸入的不是整數(shù)(如小數(shù)或者字母),假設(shè) scanf 函數(shù)最后一次得到的整數(shù)是 2 ,那么程序會(huì)不停地輸出“Please input an integer: 2”。這是因?yàn)?scanf("%d", i); 只能接受整數(shù),如果用戶輸入了字母,則這個(gè)字母會(huì)遺留在“輸入緩沖區(qū)”中。因?yàn)榫彌_中有數(shù)據(jù),故而 scanf 函數(shù)不會(huì)等待用戶輸入,直接就去緩沖中讀取,可是緩沖中的卻是字母,這個(gè)字母再次被遺留在緩沖中,如此反復(fù),從而導(dǎo)致不停地輸出“Please input an integer: 2”。

也許有人會(huì)說:“居然這樣,那么在 scanf 函數(shù)后面加上‘fflush(stdin);’,把輸入緩沖清空掉不就行了?”然而這是錯(cuò)的!C和C++的標(biāo)準(zhǔn)里從來沒有定義過 fflush(stdin)。也許有人會(huì)說:“可是我用 fflush(stdin) 解決了這個(gè)問題,你怎么能說是錯(cuò)的呢?”的確,某些編譯器(如VC6)支持用 fflush(stdin) 來清空輸入緩沖,但是并非所有編譯器都要支持這個(gè)功能(linux 下的 gcc 就不支持),因?yàn)闃?biāo)準(zhǔn)中根本沒有定義 fflush(stdin)。MSDN 文檔里也清楚地寫著fflush on input stream is an extension to the C standard(fflush 操作輸入流是對 C 標(biāo)準(zhǔn)的擴(kuò)充)。當(dāng)然,如果你毫不在乎程序的移植性,用 fflush(stdin) 也沒什么大問題。以下是 C99 對 fflush 函數(shù)的定義:

int fflush(FILE *stream);

如果 stream 指向輸出流或者更新流(update stream),并且這個(gè)更新流

最近執(zhí)行的操作不是輸入,那么 fflush 函數(shù)將把這個(gè)流中任何待寫數(shù)據(jù)傳送至

宿主環(huán)境(host environment)寫入文件。否則,它的行為是未定義的。

原文如下:

int fflush(FILE *stream);

If stream points to an output stream or an update stream in which

the most recent operation was not input, the fflush function causes

any unwritten data for that stream to be delivered to the host environment

to be written to the file; otherwise, the behavior is undefined.

其中,宿主環(huán)境可以理解為操作系統(tǒng)或內(nèi)核等。

由此可知,如果 stream 指向輸入流(如 stdin),那么 fflush 函數(shù)的行為是不確定的。故而使用 fflush(stdin) 是不正確的,至少是移植性不好的。

C語言 fflush(stdin)是什么意思

fflush(stdin)中stdin是標(biāo)準(zhǔn)輸入的意思。

fflush(stdin)的作用是清空標(biāo)準(zhǔn)輸入緩沖區(qū)。

舉例說明如下:

int a;

char c;

scanf("%d",a);

fflush(stdin); // 清空輸入緩沖區(qū)

scanf("%c",c);如果不加fflush(stdin)的話,第一次輸入的回車可能會(huì)被第二次輸入操作所捕捉,也即變量c的值將會(huì)是回車符,并不會(huì)接收用戶輸入的字符。

c語言ffulsh什么意思

fflush()是標(biāo)準(zhǔn)I/O函數(shù)中的一個(gè),從其字面意思也可以看出來是沖洗,刷新的意思。大家知道,在程序中進(jìn)行讀寫操作的時(shí)候,一般情況下都要進(jìn)行緩沖的,也就是將要讀寫的內(nèi)容先保存到一塊內(nèi)存區(qū)域,這塊內(nèi)存區(qū)域就叫做“緩沖區(qū)”,然后在對這個(gè)緩沖區(qū)進(jìn)行操作,一匹配不同的設(shè)備的讀寫速率不同的問題。所以很多時(shí)候,讀寫并不是立馬就有效的,因?yàn)樽x寫的內(nèi)容被緩沖了。所以,在你想要立馬顯現(xiàn)效果的時(shí)候,可以對緩沖區(qū)的內(nèi)容進(jìn)行主動(dòng)刷新,調(diào)用ffluash()函數(shù),就是這個(gè)功能。此函數(shù)可以將緩沖區(qū)內(nèi)任何沒有寫的數(shù)據(jù)發(fā)送到由一個(gè)文件指針指定的輸出文件中去,這個(gè)過程也叫做刷新緩沖區(qū)。

名稱欄目:c語言fflush函數(shù) c語言中ff
標(biāo)題網(wǎng)址:http://m.newbst.com/article18/doippdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化網(wǎng)站排名品牌網(wǎng)站建設(shè)微信公眾號網(wǎng)站營銷網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化