亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言中printf()緩沖問題詳解

 更新時間:2017年11月02日 10:22:36   作者:棲遲於一丘  
這篇文章主要給大家介紹了關(guān)于C語言中printf()緩沖問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

緩沖區(qū)又稱為緩存,它是內(nèi)存空間的一部分。也就是說,在內(nèi)存空間中預(yù)留了一定的存儲空間,這些存儲空間用來緩沖輸入或輸出的數(shù)據(jù),這部分預(yù)留的空間就叫做緩沖區(qū)。

緩沖區(qū)根據(jù)其對應(yīng)的是輸入設(shè)備還是輸出設(shè)備,分為輸入緩沖區(qū)和輸出緩沖區(qū)。

為什么要引入緩沖區(qū)

比如我們從磁盤里取信息,我們先把讀出的數(shù)據(jù)放在緩沖區(qū),計(jì)算機(jī)再直接從緩沖區(qū)中取數(shù)據(jù),等緩沖區(qū)的數(shù)據(jù)取完后再去磁盤中讀取,這樣就可以減少磁盤的讀寫次數(shù),再加上計(jì)算機(jī)對緩沖區(qū)的操作大大快于對磁盤的操作,故應(yīng)用緩沖區(qū)可大大提高計(jì)算機(jī)的運(yùn)行速度。

又比如,我們使用打印機(jī)打印文檔,由于打印機(jī)的打印速度相對較慢,我們先把文檔輸出到打印機(jī)相應(yīng)的緩沖區(qū),打印機(jī)再自行逐步打印,這時我們的CPU可以處理別的事情。

現(xiàn)在您基本明白了吧,緩沖區(qū)就是一塊內(nèi)存區(qū),它用在輸入輸出設(shè)備和CPU之間,用來緩存數(shù)據(jù)。它使得低速的輸入輸出設(shè)備和高速的CPU能夠協(xié)調(diào)工作,避免低速的輸入輸出設(shè)備占用CPU,解放出CPU,使其能夠高效率工作。

緩沖區(qū)的類型

緩沖區(qū) 分為三種類型:全緩沖、行緩沖和不帶緩沖。

1) 全緩沖

在這種情況下,當(dāng)填滿標(biāo)準(zhǔn)I/O緩存后才進(jìn)行實(shí)際I/O操作。全緩沖的典型代表是對磁盤文件的讀寫。

2) 行緩沖

在這種情況下,當(dāng)在輸入和輸出中遇到換行符時,執(zhí)行真正的I/O操作。這時,我們輸入的字符先存放在緩沖區(qū),等按下回車鍵換行時才進(jìn)行實(shí)際的I/O操作。典型代表是標(biāo)準(zhǔn)輸入(stdin)和標(biāo)準(zhǔn)輸出(stdout)。

3) 不帶緩沖

也就是不進(jìn)行緩沖,標(biāo)準(zhǔn)出錯情況stderr是典型代表,這使得出錯信息可以直接盡快地顯示出來。

下面開始本文的正文:通過實(shí)例講解C語言中的printf()緩沖問題

起步

標(biāo)準(zhǔn)輸出被滯后了. 不同編譯器出來的結(jié)果可能不一樣. 我在windows平臺的 VC++6.0 上是121212.

分析

標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯的緩沖機(jī)制不同,標(biāo)準(zhǔn)出錯不緩沖,標(biāo)準(zhǔn)輸出有緩沖.

什么情況下會刷新緩沖區(qū)?

  • 程序結(jié)束時調(diào)用 exit(0) .
  • 遇到 \n , \r 時會刷新緩沖區(qū).
  • 手動刷新 fflush .
  • 緩沖區(qū)滿時自動刷新.

附錄

示例代碼:

#include <stdio.h>

int main(int argc, char const *argv[])
{
 int i;
 for (i = 0; i < 3; ++i)
 {
 printf("1");
 fprintf(stderr, "2");
 }
}

找到了讓 windows 平臺也使用輸出緩沖的方式了:

#include <stdio.h>
char buf[512]; 
int main(int argc, char const *argv[])
{
 setvbuf(stdout, buf, _IOLBF, 512);
 int i;
 for (i = 0; i < 3; ++i)
 {
 printf("1");
 fprintf(stderr, "2");
 }
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • C++實(shí)現(xiàn)點(diǎn)云添加高斯噪聲功能

    C++實(shí)現(xiàn)點(diǎn)云添加高斯噪聲功能

    所謂高斯噪聲是指它的概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲,這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)點(diǎn)云添加高斯噪聲功能的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C語言內(nèi)存函數(shù)的使用及其模擬實(shí)現(xiàn)

    C語言內(nèi)存函數(shù)的使用及其模擬實(shí)現(xiàn)

    這篇文章主要介紹了C語言內(nèi)存函數(shù)的使用及其模擬實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • C++中的位運(yùn)算和位圖bitmap解析

    C++中的位運(yùn)算和位圖bitmap解析

    這篇文章主要介紹了C++中的位運(yùn)算和位圖bitmap,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 詳解C語言中return與exit的區(qū)別

    詳解C語言中return與exit的區(qū)別

    這篇文章主要介紹了詳解C語言中return與exit的區(qū)別的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C語言實(shí)現(xiàn)三子棋小游戲的示例代碼

    C語言實(shí)現(xiàn)三子棋小游戲的示例代碼

    這篇文章主要介紹了如何通過C語言實(shí)現(xiàn)三子棋小游戲,三子棋小游戲的實(shí)現(xiàn)主要依賴于循環(huán)語句、函數(shù)和數(shù)組,感興趣的小伙伴可以嘗試一下
    2022-10-10
  • C++的array和&array有什么區(qū)別

    C++的array和&array有什么區(qū)別

    本文主要介紹了C++的array和&array有什么區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C語言實(shí)現(xiàn)按月顯示的日歷

    C語言實(shí)現(xiàn)按月顯示的日歷

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)按月顯示的日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 從匯編看c++函數(shù)的默認(rèn)參數(shù)的使用說明

    從匯編看c++函數(shù)的默認(rèn)參數(shù)的使用說明

    本篇文章介紹了,在c++中函數(shù)的默認(rèn)參數(shù)的使用說明分析。需要的朋友參考下
    2013-05-05
  • 詳解為什么指針被譽(yù)為C語言靈魂

    詳解為什么指針被譽(yù)為C語言靈魂

    說到指針,就不可能脫離開內(nèi)存,學(xué)會指針的人分為兩種,一種是不了解內(nèi)存模型,另外一種則是了解。不了解的對指針的理解就停留在“指針就是變量的地址”這句話,會比較害怕使用指針,特別是各種高級操作。本文將帶你詳細(xì)了解C語言指針
    2021-06-06
  • C語言簡明介紹指針的使用

    C語言簡明介紹指針的使用

    C語言這門課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對指針的掌握是非常重要的,本文將具體針對指針的基礎(chǔ)做詳盡的介紹
    2022-06-06

最新評論