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

C++詳細講解print緩沖區(qū)的刷新

 更新時間:2022年05月21日 10:41:52   作者:Mi?ronin  
這篇文章主要介紹了print緩沖區(qū)刷新問題,實現(xiàn)代碼簡單易懂,具有很好的參考價值,希望對大家有所幫助,需要的朋友可以參考下

printf緩沖區(qū)問題

以下內容在Linux測試,Window中進行試驗時現(xiàn)象可能會有不同。

一.引入

對于printf輸出函數(shù)具有緩沖區(qū),是在使用sleep函數(shù)測試時發(fā)現(xiàn)的。

首先把測試問題復述一下:

簡單寫一個hello world的程序

#include <stdio.h>
int main()
{
    printf("hello world\n");
    sleep(5);  //延遲5秒
     printf("hello friend\n");
    return 0;
}

輸出結果:

hello world 和hello friend的輸出中間間隔了5秒

當我們修改一下代碼后:將hello world后的\n換行符刪掉后

#include <stdio.h>
int main()
{
    printf("hello world");
    sleep(5);  //延遲5秒
     printf("hello friend\n");
    return 0;
}

輸出結果:

這個輸出結果是: 光標先閃爍5s然后彈出hello worldhello friend

這里我們發(fā)現(xiàn)就會發(fā)現(xiàn):當我們刪除字符‘\n’,函數(shù)sleep不再是語句間延遲,而是變成延遲整個程序。

這里出現(xiàn)的結果就很詫異 原來就一直沒注意過也沒有想過會存在這個問題 ,下面就深入理解一下printf。

二.深入理解printf

printf是一個行緩沖函數(shù),并不會直接將數(shù)據(jù)輸出到屏幕,而是先放到緩沖區(qū)中,滿足一定的條件后,才會將緩沖區(qū)內容輸出。

設置緩沖區(qū)是為提高IO速度,減少CUP等待IO而浪費CPU資源。

如下5個條件可以刷新緩沖區(qū):

  1. 緩沖區(qū)寫滿
  2. 寫入的字符中有‘\n’ , ‘\r’
  3. 調用fflush手動刷新緩沖區(qū)
  4. 調用scanf要從緩沖區(qū)中讀取數(shù)據(jù)時,也會將緩沖區(qū)內的數(shù)據(jù)刷新
  5. 程序結束時

1. 緩沖區(qū)寫滿

printf函數(shù)的緩沖區(qū)大小為1024個字節(jié),當超出緩沖區(qū)的大小,緩沖區(qū)會被刷新,將會打印出結果。

緩沖區(qū)大小為1024個字節(jié),這個大小是這樣得出,代碼如下:

 #include <stdio.h>
 #include <stdlib.h>
 /*argc:命令行輸入?yún)?shù)個數(shù),argv:命令行參數(shù) 
  *argv為字符指針數(shù)組,argv[i]為指向第i個命令行參數(shù)內容的指針
  */
 int main(int argc, char **argv){ 
     int i;
     char a='a';
     if(argc != 2) //命令行參數(shù)為2,否則出錯
     {
         printf("Usage:%s Number\n",argv[0]); 
         return 0;
     }
     for(i=0;i<atoi(argv[1]);i++) //atoi:字符轉化為整數(shù)
     {
         printf("%c",a);
     }
     while(1);  //讓程序一直運行
 }

運行結果:

說明:在linux下,printf緩沖區(qū)大小為1024字節(jié)。while(1)使程序一直運行,當緩沖區(qū)未滿時,不會輸出打印。

2. 寫入的字符中有‘\n’,‘\r’

測試代碼:

#include <stdio.h>
int main()
{
    printf("hello world\n");//
    sleep(5);  //延遲5秒
     printf("hello friend\n");
    return 0;
}

運行結果:

3. 調用fflush手動刷新緩沖區(qū)

測試代碼:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(void)
{
    printf("hello world");
    fflush(stdout);
    sleep(5);
    exit(0);
}

運行過程及結果:

這里在printf語句結束后,使用fflush強制刷新緩沖區(qū),就先打印出來內容,再執(zhí)行的 sleep語句。

4. 調用scanf要從緩沖區(qū)中讀取數(shù)據(jù)時,也會將緩沖區(qū)內的數(shù)據(jù)刷新

這個我們可以理解為當我們從鍵盤輸入的時候,就會將數(shù)據(jù)內的數(shù)據(jù)自動刷新。

5. 程序結束時

測試代碼:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(void)
{
    printf("hello world");
    sleep(5);
    exit(0);
}

運行結果:

到此這篇關于C++詳細講解print緩沖區(qū)的刷新的文章就介紹到這了,更多相關C++ print緩沖區(qū)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++實現(xiàn)簡單推箱子小游戲

    C++實現(xiàn)簡單推箱子小游戲

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單推箱子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C語言內存對齊實例詳解

    C語言內存對齊實例詳解

    這篇文章主要介紹了C語言內存對齊,包括內存對其的基本概念及用法,以及注意事項,并以實例形式加以說明,需要的朋友可以參考下
    2014-09-09
  • Linux下用Valgrind做檢查(防止內存泄露)

    Linux下用Valgrind做檢查(防止內存泄露)

    Valgrind是一款基于模擬linux下的程序調試器和剖析器的軟件套件,可以運行于x86, amd64和ppc32架構上。valgrind包含一個核心,它提供一個虛擬的CPU運行程序,還有一系列的工具,它們完成調試,剖析和一些類似的任務
    2014-01-01
  • C語言實現(xiàn)樹的動態(tài)查找實例代碼

    C語言實現(xiàn)樹的動態(tài)查找實例代碼

    這篇文章主要介紹了C語言實現(xiàn)樹的動態(tài)查找實例代碼的相關資料,需要的朋友可以參考下
    2017-06-06
  • QT實現(xiàn)貪吃蛇游戲

    QT實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了QT實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 一文讓你徹底明白C++中的const

    一文讓你徹底明白C++中的const

    這篇文章主要給大家介紹了關于C++中const的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Visual Studio 2019 Professional 激活方法詳解

    Visual Studio 2019 Professional 激活方法詳解

    這篇文章主要介紹了Visual Studio 2019 Professional 激活方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C語言運用回調函數(shù)實現(xiàn)計算器

    C語言運用回調函數(shù)實現(xiàn)計算器

    這篇文章主要為大家詳細介紹了C語言運用回調函數(shù)實現(xiàn)計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • OpenGL實現(xiàn)邊緣填充算法

    OpenGL實現(xiàn)邊緣填充算法

    這篇文章主要為大家詳細介紹了OpenGL實現(xiàn)邊緣填充算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 基于C語言的庫封裝發(fā)布技術詳解

    基于C語言的庫封裝發(fā)布技術詳解

    在編程的過程中,使用已經(jīng)封裝好的庫函數(shù)是十分方便的,也是十分高效的,這篇文章主要給大家介紹了關于C語言庫的封裝和使用的相關資料,需要的朋友可以參考下
    2021-08-08

最新評論