最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++中I/O進(jìn)階詳解及其作用介紹

 更新時間:2021年09月02日 16:49:15   作者:我是小白呀  
這篇文章主要介紹了C/C++中I/O進(jìn)階詳解及其作用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

概述

C++ 的輸入 (input stream) 和輸出 (output stream)是由若干字節(jié)組成的字節(jié)序列, 使得數(shù)據(jù)按順序從一個對象傳送到另一對象. 流 (stream) 表示量信息從源到目的端的流動.

在這里插入圖片描述

C++ 的輸入輸出包括:

標(biāo)準(zhǔn) I/O: 對系統(tǒng)指定的標(biāo)準(zhǔn)設(shè)備的輸入

文件 I/O: 對磁盤文件的輸入和輸出

串 I/O: 對內(nèi)存中指定的空間進(jìn)行的輸入和輸出

I/O 類庫

I/O stream 類庫:

在這里插入圖片描述

頭文件是程序與類庫的接口, iostream 類庫的接口分別由不同的文件來實(shí)現(xiàn).

常用的頭文件:

iostream: 包含對 I/O 進(jìn)行操作的基本信息

fstream: 用于用戶管理的文件的 I/O 操作

strstream: 用于字符串流的 I/O 操作

stdiostream: 用于混合使用 C 和 C++ 的 I/O 機(jī)制

iomanip: 使用格式化 I/O 時的操作

I/O 中的重載

在之前的文章中我們使用<<>>來實(shí)現(xiàn)控制臺的輸出和輸入.

在這里插入圖片描述

<<>>被重載來用于標(biāo)準(zhǔn)類型數(shù)據(jù)的輸出和輸入:

  • <<>>本來是 C++ 中的左位移運(yùn)算符和右位移運(yùn)算符
  • 在 iostream 頭文件中<<>>被重載了
  • 在使用<<>>的時候, 我們必須#include <iostream>

在 input stream 和 output stream 類中對位移運(yùn)算符<<>>進(jìn)行重載的成員函數(shù), 包括:

  • ostream operator << (int );
  • ostream operator << (float );
  • ostream operator << (char );
  • ostream operator << (char *);

注: 想將<<>>用于自己聲明的類型數(shù)據(jù)必須對<<>>進(jìn)行重載.

流對象

I/O stream 頭文件還定義了 4 種流對象:

  • cin: 從標(biāo)準(zhǔn)輸入設(shè)備輸入到內(nèi)存的數(shù)據(jù)流對象, 稱- 為 cin 流或標(biāo)準(zhǔn)輸入流
  • cout: 從內(nèi)存輸出到控制臺的數(shù)據(jù)流對象, 稱為 cout 流或標(biāo)準(zhǔn)輸出流
  • cerr 和 clog: 向控制臺輸出錯誤信息

例如:

在這里插入圖片描述

當(dāng)我們從鍵盤輸入 “World”, cin 會把字符串存入內(nèi)存, 當(dāng)我們調(diào)用 cout, 內(nèi)存中的 “World” 就被輸出到控制臺上.

標(biāo)準(zhǔn)輸入流

標(biāo)準(zhǔn)輸出流, 是流向標(biāo)準(zhǔn)輸出設(shè)備的數(shù)據(jù). ostream 類定義了 3 個輸出流對象: cout, cerr, clog.

cin 流對象

cin 是 istream 類的對象, 從標(biāo)準(zhǔn)輸入設(shè)備獲取數(shù)據(jù). 程序中的變量通過流提取符>>從 cin 流中提取數(shù)據(jù):

流提取符>>從流中提取數(shù)據(jù)時, 通常跳過流中的空格, tab 鍵, 換行符等空白字符

只有在輸入完數(shù)據(jù)再按回車鍵后, 該行數(shù)據(jù)才被送入鍵盤緩沖區(qū), 形成輸入流. 提取運(yùn)算符>>才能從中提取數(shù)據(jù)

程序?qū)逆I盤緩沖區(qū)中連續(xù)的獲得數(shù)據(jù)

當(dāng)遇到無效字符或文件結(jié)束符^Z時, cin 無法正常提取數(shù)據(jù), 處于出錯狀態(tài), 返回 0 值 (false)

在這里插入圖片描述

案例

輸入個數(shù)不確定的成績:

#include <iostream>
#include <valarray>
using namespace std;

int main() {
    // 定義變量
    double grade;
    cout << "enter your grade:\n";
    while (cin >> grade){
        if(grade >= 85){
            cout << grade << " Good!" << endl;
        }
        if(grade < 60){
            cout << grade << " fail" << endl;
        }
        cout << "enter your grade:\n";
    }
    cout << "The end." << endl;

    return 0;
}

輸出結(jié)果:

enter your grade:
90
90 Good!
enter your grade:
12
12 fail
enter your grade:
^Z
The end.

get 函數(shù)

不帶參數(shù)的 get 函數(shù):

cin.get()
  • 從輸入流中提取一個字符, 返回讀入的字符
  • 遇到輸入流中的文件結(jié)束符, 則返回 EOF (End Of File)

有一個參數(shù)的 get 函數(shù):

cin.get(c)
  • 從輸入流中讀取一個字符, 賦值給字符變量 c
  • 讀取成功返回真, 失敗或遇到文件結(jié)束符返回 0 (false)

有 3 個參數(shù)的 get 函數(shù):

cin.get(字符數(shù)組或指針, n, 終止字符)
  • 從輸入流中讀取 n-1 個字符, 賦值給指定的字符數(shù)組
  • 若在讀取 n-1 個字符之前遇到指定的終止字符, 則提前結(jié)束讀取
  • 讀取成功函數(shù)返回真, 失敗返回 0 (false)

getline 函數(shù)

getline 函數(shù)的作用是從輸入流中讀取一行字符. 例如:

istream &getline(char *buffer, streamsize num );
istream &getline(char *buffer, streamsize num, char delim );

getline 函數(shù)用于輸入流, 讀取字符到 buffer 中, 直到:

  • num-1 個字符已經(jīng)讀入
  • 碰到一個換行標(biāo)志
  • 碰到一個 EOF
  • 讀到字符 delim

注: getline 函數(shù)遇到空白字符不結(jié)束.

eof 函數(shù)

eof (End Of File) 表示文件結(jié)束. 從輸入流讀取數(shù)據(jù)如果達(dá)到文件末尾或遇到文件結(jié)束符時, eof 函數(shù)的值為非零值 (true), 否則為 0 (false)

cout 流對象

cout 是 console input 的縮寫, 意為在控制臺的輸出:

  • cout 不是 C++ 預(yù)定義的關(guān)鍵字, 它是 ostream 流類的對象, 在 iostream 中定義
  • “cout <<” 輸出基本類型的數(shù)據(jù)時, 可以不必考慮數(shù)據(jù)是什么類型,系統(tǒng)會判斷數(shù)據(jù)的類型, 并根據(jù)其類型選擇調(diào)用與之匹配的運(yùn)算符重載函數(shù)
  • cout 流在內(nèi)存中對應(yīng)開辟了一個緩沖區(qū), 用來存放流中的數(shù)據(jù), 當(dāng)向 cout 流插入一個 endl 時, 立即輸出流中所有數(shù)據(jù), 然后插入一個換行符, 并刷新流 (清空緩沖區(qū))
  • cout.flush(); 輸出流中所有數(shù)據(jù), 刷新緩沖區(qū)

在這里插入圖片描述

cerr 流對象

cerr 流對象是標(biāo)準(zhǔn)錯誤流, 被指定為與顯示器關(guān)聯(lián). cerr 的作用是想標(biāo)準(zhǔn)組錯誤設(shè)備 (standard error device) 輸出有關(guān)出錯信息.

cerr 和 cout 的區(qū)別:

  • cout 流通常是傳送到顯示器輸出, 但也可以被重新定向輸出到磁盤文件
  • cerr 流中的信息只能在顯示器輸出

cerr 的用途:

  • 當(dāng)調(diào)試程序時, 往往不希望程序運(yùn)行時的出錯信息被送到其他文件, 而要求在顯示器上及時輸出, 這是應(yīng)該用 cerr
  • cerr 流中的信息是用戶根據(jù)需要指定的

在這里插入圖片描述

案例 (解一元二次方程):

#include <iostream>
#include <valarray>
using namespace std;

int main() {
    double a, b, c, delta;
    cout << "please input a, b, c:\n";
    cin >> a >> b >> c;

    if (a==0){
        cerr << "a is equal to zero, error!" << endl;
    }else if((delta = b*b - 4*a*c) < 0){
        cerr << "delta < 0, error" << endl;
    }else{
        cout << "x1=" << (-b + sqrt(delta)) / (2*a) << endl;
        cout << "x1=" << (-b - sqrt(delta)) / (2*a) << endl;
    }
    
    return 0;
}

輸出結(jié)果:

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

clog 流對象

colg 流對象也是標(biāo)準(zhǔn)錯誤流, 它是 console log 的縮寫. clog 的作用和 cerr 相同, 都是在終端顯示器上顯示出錯誤信息.

clog 和 cerr 的區(qū)別:

  • cerr 是不經(jīng)過緩沖區(qū), 直接向顯示器上輸出有關(guān)信息
  • clog 中的信息存放在緩沖區(qū), 緩沖區(qū)滿后或遇到 endl 時向顯示器輸出

到此這篇關(guān)于C/C++中I/O進(jìn)階詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++ I/O進(jìn)階內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux C/C++實(shí)現(xiàn)DNS客戶端請求域名IP的示例代碼

    Linux C/C++實(shí)現(xiàn)DNS客戶端請求域名IP的示例代碼

    DNS全稱:Domain Name System,域名解析系統(tǒng),是互聯(lián)網(wǎng)的一項(xiàng)服務(wù),本文主要介紹了C/C++如何實(shí)現(xiàn)DNS客戶端請求域名IP,感興趣的可以了解下
    2024-03-03
  • C++實(shí)現(xiàn)并行計算的兩種方式

    C++實(shí)現(xiàn)并行計算的兩種方式

    本文介紹了使用C++實(shí)現(xiàn)并行計算的兩種方式,包括OpenMP和MPI,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 詳解C++引用變量時那些你不知道的東西

    詳解C++引用變量時那些你不知道的東西

    這篇文章主要為大家詳細(xì)介紹了C++引用變量時那些你不知道的東西——引用變量延遲綁定,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-11-11
  • C語言中關(guān)于scanf函數(shù)的一些問題詳解

    C語言中關(guān)于scanf函數(shù)的一些問題詳解

    這篇文章主要為大家介紹了C語言中關(guān)于scanf函數(shù)的一些問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Matlab實(shí)現(xiàn)別踩白塊小游戲的示例代碼

    Matlab實(shí)現(xiàn)別踩白塊小游戲的示例代碼

    別踩白塊是一款音樂類休閑游戲,游戲的玩法不難,只需跟著音樂的節(jié)奏點(diǎn)中對的方塊即可。本文將用Matlab實(shí)現(xiàn)這一經(jīng)典游戲,感興趣的可以了解一下
    2022-03-03
  • C++中關(guān)于constexpr函數(shù)使用及說明

    C++中關(guān)于constexpr函數(shù)使用及說明

    這篇文章主要介紹了C++中關(guān)于constexpr函數(shù)使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言實(shí)現(xiàn)遍歷文件夾中的文件

    C語言實(shí)現(xiàn)遍歷文件夾中的文件

    這篇文章主要為大家詳細(xì)介紹了如何使用C語言實(shí)現(xiàn)遍歷文件夾中的文件,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-02-02
  • 如何判斷一個數(shù)是否為2的冪次方?若是,并判斷出來是多少次方?

    如何判斷一個數(shù)是否為2的冪次方?若是,并判斷出來是多少次方?

    本篇文章是對如何判斷一個數(shù)是否為2的冪次方?若是,并判斷出來是多少次方的實(shí)現(xiàn)方法,進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c++中stack、queue和vector的基本操作示例

    c++中stack、queue和vector的基本操作示例

    這篇文章主要給大家介紹了關(guān)于c++中stack、queue和vector基本操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • QT中QChart繪制折線圖

    QT中QChart繪制折線圖

    本文主要介紹了QChart繪制折線圖,Qt Charts基于Qt的Graphics View架構(gòu),其核心組件是QChartView 和 QChart,感興趣的可以了解一下
    2022-04-04

最新評論

高密市| 延安市| 长治市| 遂平县| 龙海市| 利津县| 垦利县| 和龙市| 汤原县| 牟定县| 苏州市| 鄂托克旗| 杭锦旗| 鹿邑县| 海口市| 格尔木市| 嘉义市| 淮滨县| 密云县| 新龙县| 永川市| 盱眙县| 荔波县| 团风县| 全椒县| 梁河县| 新绛县| 互助| 长宁县| 资兴市| 林甸县| 正宁县| 竹山县| 新郑市| 新和县| 林甸县| 明溪县| 延津县| 南乐县| 仙桃市| 凉山|