c++中的IO流

c語言中的IO操作

標準類型的輸入輸出:

  • 輸入------>數據來源是通過鍵盤進行輸入
  • 輸出------>程序中的數據輸出到控制臺

c語言中:

  • scanf:輸入

  • printf:輸出
    兩個函數的相同點
    1 —格式串
    2 —不定參數
    兩個函數的缺陷
    1 —用戶要提供數據的格式—用戶要記憶大量的格式串—而且容易出錯
    2 —兩個函數參數檢測不嚴格

  • getchar()

  • putchar()

  • gets()

  • puts()

文件類型的輸入和輸出

  • 輸出:數據從 文件中讀取
  • 輸出:將程序中的數據輸出到文件中

在這里插入圖片描述

對輸入輸出緩沖區的理解:
1.可以屏蔽掉低級I/O的實現,低級I/O的實現依賴操作系統本身內核的實現,所以如果能夠屏蔽這部分的差異,可以很容易寫出可移植的程序
2.可以使用這部分的內容實現“行”讀取的行為,對于計算機而言是沒有“行”這個概念,有了這部分,就可以定義“行”的概念,然后解析緩沖區的內容,返回一個“行”。

C++IO流

在這里插入圖片描述
cerr和clog標準錯誤輸出流,輸出設備是顯示器在流類庫中,最重要的兩部分功能為標準輸入/輸出
(standard input/output)和文件處理。在C++的流類庫中定義了四個全局流對象:cin,cout,cerr和
clog
cin標準輸入流對象,鍵盤為其對應的標準設備;cout標準輸出流對象,顯示器為標準設備。
在新庫中要使用這四個功能,必須包含文件并引入std標準命名空間

為什么c++中cout和cin不需要格式串?

在這里插入圖片描述
因為把所有的內置類型都進行了輸出運算符的重載

注意

  1. cin為緩沖流。鍵盤輸入的數據保存在緩沖區中,當要提取時,是從緩沖區中拿。如果一次輸入過多,會留在那兒慢慢用,如果輸入錯了,必須在回車之前修改,如果回車鍵按下就無法挽回了。只有把輸入緩沖區中的數據取完后,才要求輸入新的數據。不可能用刷新來清除緩沖區,所以不能輸錯,也不能多輸
  2. 輸入的數據類型必須與要提取的數據類型一致,否則出錯。出錯只是在流的狀態字state中對應位置位置,程序繼續。
  3. 空格和回車都可以作為數據之間的分格符,所以多個數據可以在一行輸入,也可以分行輸入。但如果是字符型和字符串,則空格(ASCII碼為32)無法用cin輸入,字符串中也不能有空格。回車符也無法讀入。

c語言中文件操作

文件分類

  1. 文本格式文件
  2. 二進制格式文件

按照文本方式寫:
fwrite—>(buf,單個元素的字節,總共多少個元素,文件指針)

int a =12345678;
int b = atoi(str);//字符串轉整型
char sz[32] = {0);
//整型轉字符型
itoa(a,sz,10);//1.轉換哪個變量 2.用誰來接收 3.轉換成什么進制
//sz[]--->'1''2''3''4''5''6''7''8''\0'
//按二進制格式寫入
fwrite(&a,sizeof(a),1,pf);//1.寫入變量2.多大,3.寫幾個,4.朝哪個文件寫
fwrite(sz,1,strlen(sz),pf);//按文本方式寫

常用文件操作的函數

  1. fopen(“文件路徑”,“文件的格式”)—>操作文件的格式
r    打開只讀文件,該文件必須存在。
r+   打開可讀寫的文件,該文件必須存在。
rb   打開一個二進制文件,只讀。
rb+  以讀/寫方式打開一個二進制文件。
w    打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+   打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
wb   打開一個二進制文件,只寫。
wb+  以讀/寫方式建立一個新的二進制文件。
a    以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。
a+   以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾后,即文件原先的內容會被保留。
ab   打開一個二進制文件,進行追加 。
ab+  以讀/寫方式打開一個二進制文件進行追加 。
  1. fclose()
  2. fread()
  3. fwrite()
  4. fgetc()
  5. fputc()
  6. fgets()
  7. fputs()

更多詳情請參考這里

如何檢測一個文件是否讀到結尾

檢測文本文件格式可以,二進制文件不行
EOF是文件的結尾標記在 一個字節里保存了-1,文件里的數據-1按照兩個字節來進行存儲,一個是符號一個是1。

while (EOF != (ch=fgetc()) )

c++中的文件操作

  1. 定義一個文件流對象
    • ifstream ifile(只輸入用)
    • ofstream ofile(只輸出用)
    • fstream iofile(既輸入又輸出用)
  2. 使用文件流對象的成員函數打開一個磁盤文件,使得文件流對象和磁盤文件之間建立聯系
  3. 使用提取和插入運算符對文件進行讀寫操作,或使用成員函數進行讀寫
  4. 關閉文件
#include<fstream>
// 使用文件IO流用文本及二進制方式演示讀寫配置文件
struct ServerInfo
{char _ip[32]; // ipint _port; // 端口
};struct ConfigManager
{
public:ConfigManager(const char* configfile = "bitserver.config"):_configfile(configfile){}void WriteBin(const ServerInfo& info){// 這里注意使用二進制方式打開寫ofstream ofs(_configfile, ifstream::out | ifstream::binary);ofs.write((const char*)&info, sizeof(ServerInfo));ofs.close();}void ReadBin(ServerInfo& info){// 這里注意使用二進制方式打開讀ifstream ifs(_configfile, ifstream::in | ifstream::binary);ifs.read((char*)&info, sizeof(ServerInfo));ifs.close();}void WriteText(const ServerInfo& info){// 這里會發現IO流寫整形比C語言那套就簡單多了,// C 語言得先把整形itoa再寫ofstream ofs(_configfile);ofs << info._ip << endl;ofs << info._port << endl;ofs.close();}void ReadText(ServerInfo& info){// 這里會發現IO流讀整形比C語言那套就簡單多了,// C 語言得先讀字符串,再atoiifstream ifs(_configfile);ifs >> info._ip;ifs >> info._port;ifs.close();}
private:string _configfile; // 配置文件
};int main()
{ConfigManager cfgMgr;ServerInfo wtinfo;ServerInfo rdinfo;strcpy(wtinfo._ip, "127.0.0.1");wtinfo._port = 80;// 二進制讀寫cfgMgr.WriteBin(wtinfo);cfgMgr.ReadBin(rdinfo);cout << rdinfo._ip << endl;cout << rdinfo._port << endl;// 文本讀寫cfgMgr.WriteText(wtinfo);cfgMgr.ReadText(rdinfo);cout << rdinfo._ip << endl;cout << rdinfo._port << endl;return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383132.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383132.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383132.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

201301 JAVA2~3級---走格子

請編寫一個函數&#xff08;允許增加子函數&#xff09;&#xff0c;計算n x m的棋盤格子&#xff08;n為橫向的格子數&#xff0c;m為豎向的格子數&#xff09;沿著各自邊緣線從左上角走到右下角&#xff0c;總共有多少種走法&#xff0c;要求不能走回頭路&#xff0c;即&…

復習Linux基本操作----常見指令

Linux基本操作 ls命令 ls(list):相當于windows上的文件資源管理器 語法&#xff1a; ls [選項][目錄或文件] 功能&#xff1a;對于目錄&#xff0c;該命令列出該目錄下的所有子目錄與文件。對于文件&#xff0c;將列出文件名以及其他信息。 常用選項&#xff1a; -a 列出目…

復習Linux基礎操作---權限操作

shell命令以及運行原理 Linux嚴格意義上說的是一個操作系統&#xff0c;我們稱之為“核心&#xff08;kernel&#xff09;“ &#xff0c;但我們一般用戶&#xff0c;不能直接使用kernel。而是通過kernel的“外殼”程序&#xff0c;也就是所謂的shell&#xff0c;來與kernel溝…

【劍指offer】_01 (二維數組中的查找)

題目描述 在一個二維數組中&#xff08;每個一維數組的長度相同&#xff09;&#xff0c;每一行都按照從左到右遞增的順序排序&#xff0c;每一列都按照從上到下遞增的順序排序。請完成一個函數&#xff0c;輸入這樣的一個二維數組和一個整數&#xff0c;判斷數組中是否含有該…

【劍指offer】_02替換空格

題目描述 請實現一個函數&#xff0c;將一個字符串中的每個空格替換成“%20”。例如&#xff0c;當字符串為We Are Happy.則經過替換之后的字符串為We%20Are%20Happy。 解題思路 首先我們先算出整個字符串的長度&#xff0c;還有總共多少個空格。因為空格只占一個字節&#…

【劍指offer】_04 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果&#xff0c;請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6}&#xff0c;則重建二叉樹并返回。 解題思路 用前序的順序…

再談c++中的多態

何為多態 多態的概念&#xff1a;通俗來說&#xff0c;就是多種形態&#xff0c;具體點就是去完成某個行為&#xff0c;當不同的對象去完成時會產生出不同的狀態。 多態的實現 在繼承的體系下 基類中必須有虛函數(被virtual關鍵字修飾的成員函數)&#xff0c;在派生類中必須…

再談c++中的繼承

繼承的概念 繼承(inheritance)機制是面向對象程序設計使代碼可以復用的最重要的手段&#xff0c;它允許程序員在保持原有類特性的基礎上進行擴展&#xff0c;增加功能&#xff0c;這樣產生新的類&#xff0c;稱派生類。繼承呈現了面向對象程序設計的層次結構&#xff0c;體現了…

紅黑樹概念及其相關操作的實現

紅黑樹的概念 紅黑樹&#xff0c;是一種二叉搜索樹&#xff0c;但它并不像AVL樹一樣&#xff0c;每個結點綁定一個平衡因子。但在每個結點上增加一個存儲位表示結點的顏色&#xff0c;可以是Red或Black。 通過 對任何一條從根到葉子的路徑上各個結點著色方式的限制&#xff0c…

模擬實現STL中map和set容器

紅黑樹的迭代器 //紅黑樹的迭代器 template<class T> struct RBTreeIterator {typedef RBTreeNode<T>Node;typedef RBTreeIterator<T> Self; public:RBTreeIterator(Node* pNode nullptr):_pNode(pNode){}//具有指針操作T& operator*(){return _pNode-…

【劍指offer】_05 連續子數組最大和

題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會后,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,并期望旁邊的正數會彌補它呢&#…

排序上---(排序概念,常見排序算法,直接插入,希爾排序,直接選擇排序,堆排序)

排序的概念 排序&#xff1a;所謂排序&#xff0c;就是使一串記錄&#xff0c;按照其中的某個或某些關鍵字的大小&#xff0c;遞增或遞減的排列起來的操作。穩定性&#xff1a;假定在待排序的記錄序列中&#xff0c;存在多個具有相同的關鍵字的記錄&#xff0c;若經過排序&…

排序下---(冒泡排序,快速排序,快速排序優化,快速排序非遞歸,歸并排序,計數排序)

排序上 排序上 交換類排序 基本思想&#xff1a;所謂交換&#xff0c;就是根據序列中兩個記錄鍵值的比較結果來對換這兩個記錄在序列中的位置&#xff0c;交換排序的特點是&#xff1a;將鍵值較大的記錄向序列的尾部移動&#xff0c;鍵值較小的記錄向序列的前部移動。 冒泡…

哈希的概念及其操作

哈希概念 順序結構以及平衡樹中&#xff0c;元素關鍵碼與其存儲位置之間沒有對應的關系&#xff0c;因此在查找一個元素時&#xff0c;必須要經過關鍵碼的多次比較。順序查找時間復雜度為O(N)&#xff0c;平衡樹中為樹的高度&#xff0c;即O( Log2N)&#xff0c;搜索的效率取決…

軟件工程---1.概述

軟件的特征 抽象&#xff1a; 不可觸摸&#xff0c;邏輯實體&#xff0c;可記錄&#xff0c;但看不到復制成本低&#xff1a;不受物質材料的限制&#xff0c;不受物理定律或加工過程的制約&#xff0c;與開發成本相比&#xff0c;復制成本很低無折舊、受硬件制約、未完全擺脫手…

軟件工程---2.軟件過程

三個模型 瀑布模型增量模型集成和配置模型 沒有適用于所有不同類型軟件開發的過程模型。 瀑布模型 需求定義系統和軟件的設計實現與單元測試集成與系統測試運行與維護 瀑布模型的特征 從上一項活動中接受該項活動的工作成果&#xff08;工作產品&#xff09;&#xff0c;作…

軟件工程---3.敏捷軟件開發

敏捷軟件開發 極限編程&#xff08;XP&#xff0c; Beck1999&#xff09;Scrum方法&#xff08;Schwaber and Beedle 2001&#xff09;DSDM方法&#xff08;Stapleton 2003&#xff09; 敏捷軟件的開發宣言 個體和交互勝過過程和工具可以工作的軟件勝過面面俱到的文檔客戶合…

軟件工程---4.需求工程

需求工程定義 找出、分析、文檔化并且檢查需求的過程被稱為需求工程 需求的兩個描述層次 用戶需求&#xff0c;指高層的抽象需求。使用自然語言、圖形描述需求。系統需求&#xff0c;指底層的詳細需求。使用系統需求文檔&#xff08;有時被稱為功能規格說明&#xff09;應該…

軟件工程---5.系統建模

從不同視角對系統建模 外部視角&#xff0c;上下文模型&#xff0c;對系統上下文或環境建模交互視角&#xff0c;交互模型&#xff08;功能模型&#xff09;&#xff0c;對系統與參與者或系統內構件之間的交互建模結構視角&#xff0c;結構模型&#xff08;靜態模型&#xff0…

軟件工程---6.體系結構設計

體系結構模型是什么&#xff1f; 體系結構模型&#xff0c;該模型描述系統如何被組織為一組相互通信的構件 體系結構分類 小體系結構關注單個程序的體系結構。在這個層次上&#xff0c;我們關注單個的程序是如何補分解為構件的。大體系結構關注包括其他系統、程序和程序構件…