1. 程式人生 > >C語言第十六篇:fflush函式有什麼作用?

C語言第十六篇:fflush函式有什麼作用?

作者:stpeace的專欄

先來複習一個簡單單詞吧:

flush(注意只有一個f):沖洗,沖刷,沖掉。  例句:I flushed the toilet and went back to work again.

      下面,我們來看看一個簡單的函式:fflush(file flush,注意有兩個f), 先來看一個簡單的程式:

  1. #include <stdio.h>
  2. int main()  
  3. {  
  4.     char c;  
  5.     scanf("%c", &c);  
  6.     printf("%d\n", c);  
  7.     scanf("%c", &c);  
  8.     printf("%d\n", c);  
  9.     return 0;  
  10. }  
       執行這個程式,輸入1, 並按enter鍵,結果為:

49
10
     

      不用吃驚,這個結果很正常的,字元1對應的ASCII值剛好為49, enter鍵對應的ASCII值為10, 所以就有這樣的結果呢。可以看出,第二個scanf函式執行了,並從緩衝區中得到了值(其實,這個值不是我們想要的),那麼我們如何把緩衝區這個“馬桶”裡面的值沖掉呢?用fflush函式就可以了。如下:

  1. #include <stdio.h>
  2. int main()  
  3. {  
  4.     char
     c;  
  5.     scanf("%c", &c);  
  6.     printf("%d\n", c);  
  7.     fflush(stdin); // 沖掉“馬桶”中的無用值
  8.     scanf("%c", &c);  
  9.     printf("%d\n", c);  
  10.     return 0;  
  11. }  
      這樣,就不會顯示10了。

      下面,我們來看MSDN(2008)的一個例子(MSDN上給的程式當然是對的啊):

  1. #include <stdio.h>
  2. #include <conio.h>
  3. void main( void )  
  4. {  
  5.    int integer;  
  6.    char string[81];  
  7.    /* Read each word as a string. */
  8.    printf( "Enter a sentence of four words with scanf: " );  
  9.    for( integer = 0; integer < 4; integer++ )  
  10.    {  
  11.       scanf( "%s", string );  
  12.       printf( "%s\n", string );  
  13.    }  
  14.    /* You must flush the input buffer before using gets. */
  15.    fflush( stdin );  
  16.    printf( "Enter the same sentence with gets: " );  
  17.    gets( string );  
  18.    printf( "%s\n", string );  
  19. }  

      要是不信那個邪,你把上面程式中的fflush那一行註釋掉,執行一下程式,你就知道有什麼後果了。從而,你也就懂了fflush的作用。


     最後,我們看看MSDN中一段話,以此結束本文:

fflush has no effect on an unbuffered stream.

Buffers are normally maintained by the operating system, which determines the optimal time to write the data automatically to disk: when a buffer is full, when a stream is closed, or when a program terminates normally without closing the stream. 

相關推薦

C語言fflush函式什麼作用

作者:stpeace的專欄 先來複習一個簡單單詞吧: flush(注意只有一個f):沖洗,沖刷,沖掉。  例句:I flushed the toilet and went back to work again.       下面,我們來看看一個簡單的函式:f

Spring Boot 基礎系列教程 | 整合MyBatis

推薦 Spring Boot/Cloud 視訊: 最近專案原因可能會繼續開始使用MyBatis,已經習慣於spring-data的風格,再回頭看xml的對映配置總覺得不是特別舒服,介面定義與對映離散在不同檔案中,使得閱讀起來並不是特別方便。 Spring中整合

輕輕鬆鬆學習SpringBoot2 SpringBoot和JPA(一)(mysql)

Spring操作資料庫的方式有很多種,這一遍我們講解的是jpa(Java Persistence API)一:建立資料庫testcreate database test二:引入maven配置檔案<dependency> <groupId>mys

Vue學習之路車型列表的添加與刪除項目

html set clas shee char name 寶馬 list 刪除按鈕 又到了大家最喜歡的項目練習階段,學以致用,今天我們要用前幾篇的學習內容實現列表的添加與刪除。 學前準備: ①:JavaScript中的splice(index,i)方法:從已知數組的inde

Python 學習 networkx

字符類 tla 需要 ctr gre bic 訪問 ref plt networkx是Python的一個包,用於構建和操作復雜的圖結構,提供分析圖的算法。圖是由頂點、邊和可選的屬性構成的數據結構,頂點表示數據,邊是由兩個頂點唯一確定的,表示兩個頂點之間的關系。頂點和邊也可以

SpringBoot自定義starter

作者:追夢1819 原文:https://www.cnblogs.com/yanfei1819/p/11058502.html 版權宣告:本文為博主原創文章,轉載請附上博文連結! 前言   這一段時間專案趕進度,故該系列部落格更新沒有之前那麼頻繁,望諒解。   SpringBoot 用起來方便,它預設集成了

跟我學SpringCloud | 微服務利劍之APM平臺(二)Pinpoint

目錄 SpringCloud系列教程 | 第十六篇:微服務利劍之APM平臺(二)Pinpoint 1. Pinpoint概述 2. Pinpoint主要特性 3. Pinpoint優勢 4.

PowerBI開發 PowerBI Service基本概念

從總體上來看,PowerBI Service 有4個主要的構建模組,分別是dashboards、reports、workbooks 和 datasets,這四個模組都是目錄,位於workspaces目錄中。 一,Workspaces目錄 在PowerBI Service中,Workspaces目錄是das

C語言用結構體處理複數運算

問題:編寫一個程式,首先定義一個複數資料型別,即結構型別。然後按照複數的運算規則進行計算,並按照複數表示的格式進行輸出 程式碼: /* 煙臺大學計算機學院  2016 作者:閆春相 完成日期:2016年12月15日 版本號:V1.0 */ #include <stdi

Python之路【Django【基礎

web框架 imp self. tap resp 默認 進行 頁面 終端 Python的WEB框架有Django、Tornado、Flask 等多種,Django相較與其他WEB框架其優勢為:大而全,框架本身集成了ORM、模型綁定、模板引擎、緩存、Session等諸

MAC下使用 Node.js 實現一個 WebServer 伺服器

引序: Node.js 採用一系列“非阻塞”庫來支援事件迴圈的方式。Node.js是一個伺服器端 JavaScript 直譯器 , 也就是說 Node.js 是一個支援 JavaScript 語法編寫伺服器程式碼的環境。 在MAC下用命令安裝 N

C++primer(五版)》學習之路-模板與泛型程式設計

【宣告:版權所有,轉載請標明出處,請勿用於商業用途。聯絡信箱:[email protected]】 16.1 定義模板 1.模板定義以關鍵字template開始,後跟一個模板引數列表,這是一個逗號分隔的一個或多個模板引數的列表,用小於號(<)和大於號(&

HTML基礎

項目 logs 瀏覽器 圖片 handle 標題欄 width light 標題 本篇內容 HTML概述 HTML常用基本標簽 CSS格式引入 一、 HTML概述 1.定義: HTML,超文本標記語言,寫給瀏覽器的語言,目前網絡上應用最廣泛的語言。HTML也在不斷

C語言次博客作業--結構體

cores include san 直接 數組操作 getch stdlib.h 功能 img 一、PTA實驗作業 題目1:按等級統計學生成績 1. 本題PTA提交列表 2. 設計思路 定義循環變量i,count統計不及格人數 for i=0 to n 如果 (p+

C語言一次作業--函數嵌套調用

功能 系統 題目 調試 markdown 本周 cnblogs 解決辦法 2.3 一、實驗作業 1.1 PTA題目 1.2 學生成績管理系統 1.2.1 畫函數模塊圖,簡要介紹函數功能 1.2.2 截圖展示你的工程文件 1.2.3 函數代碼部分截圖 1.2.4 調試結果展示

C語言一次博客作業---函數嵌套調用

指定 編譯預處理 define result 宏替換 多次 clu 菜單 tro 一、實驗作業 1.1 PTA題目 題目:遞歸實現順序輸出整數 1. 本題PTA提交列表 2. 設計思路 printdigits函數 定義整型變量result存放結果 if n是10的倍數

Django進級

則表達式 djang clas 路由分發 路由 數據 分發 django數據庫 fbv 一、Django工程創建 二、Django 的 CBV和FBV 三、模板語言循環字典 四、Django基於正則表達式的URL 五、Django對應的路由名稱 六、Django路由分發 七

JavaScript 之 Dom操作

頁面 對象模型 面向 方法 bsp log gpo eva div 一、後臺管理頁面布局 二、JavaScript函數 三、eval以及時間操作 四、JavaScript作用域 五、JavaScript面向對象模型 六、DOM選擇器 七、DOM事件操作 八、DOM綁定事件的

消息隊列、緩存

dir hash 廣播 body 消息分發 ash rec 模式 edi 一、消息隊列簡紹 二、RabbitMQ基本實列: 三、RabbitMQ消息分發輪詢 四、消息持久化 五、Fanout廣播模式 六、Direct廣播模式 七、Redis基本操作 八、Redis Hash

數據庫操作

mysq 查詢 alc mys clas 多對多 class 操作 連接查詢 一、數據庫簡紹 二、mysql 增刪改查 三、mysql 外鍵關聯 四、mysql 連接查詢 五、mysql 事務與索引 六、ORM 簡紹 七、sqlalchemy 常用語法 八、sqlalche