C語言第十六篇:fflush函式有什麼作用?
作者:stpeace的專欄
先來複習一個簡單單詞吧:
flush(注意只有一個f):沖洗,沖刷,沖掉。 例句:I flushed the toilet and went back to work again.
下面,我們來看看一個簡單的函式:fflush(file flush,注意有兩個f), 先來看一個簡單的程式:
- #include <stdio.h>
- int main()
- {
- char c;
- scanf("%c", &c);
- printf("%d\n", c);
-
scanf("%c", &c);
- printf("%d\n", c);
- return 0;
- }
49
10
不用吃驚,這個結果很正常的,字元1對應的ASCII值剛好為49, enter鍵對應的ASCII值為10, 所以就有這樣的結果呢。可以看出,第二個scanf函式執行了,並從緩衝區中得到了值(其實,這個值不是我們想要的),那麼我們如何把緩衝區這個“馬桶”裡面的值沖掉呢?用fflush函式就可以了。如下:
- #include <stdio.h>
- int main()
- {
-
char
- scanf("%c", &c);
- printf("%d\n", c);
- fflush(stdin); // 沖掉“馬桶”中的無用值
- scanf("%c", &c);
- printf("%d\n", c);
- return 0;
- }
下面,我們來看MSDN(2008)的一個例子(MSDN上給的程式當然是對的啊):
- #include <stdio.h>
- #include <conio.h>
-
void main( void )
- {
- int integer;
- char string[81];
- /* Read each word as a string. */
- printf( "Enter a sentence of four words with scanf: " );
- for( integer = 0; integer < 4; integer++ )
- {
- scanf( "%s", string );
- printf( "%s\n", string );
- }
- /* You must flush the input buffer before using gets. */
- fflush( stdin );
- printf( "Enter the same sentence with gets: " );
- gets( string );
- printf( "%s\n", string );
- }
要是不信那個邪,你把上面程式中的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