日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++中的IO流

發(fā)布時間:2023/11/30 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中的IO流 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

c語言中的IO操作

標準類型的輸入輸出:

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

c語言中:

  • scanf:輸入

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

  • getchar()

  • putchar()

  • gets()

  • puts()

文件類型的輸入和輸出

  • 輸出:數(shù)據(jù)從 文件中讀取
  • 輸出:將程序中的數(shù)據(jù)輸出到文件中

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

C++IO流


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

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


因為把所有的內(nèi)置類型都進行了輸出運算符的重載

注意

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

    文件分類

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

    int a =12345678; int b = atoi(str);//字符串轉(zhuǎn)整型 char sz[32] = {0); //整型轉(zhuǎn)字符型 itoa(a,sz,10);//1.轉(zhuǎn)換哪個變量 2.用誰來接收 3.轉(zhuǎn)換成什么進制 //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);//按文本方式寫

    常用文件操作的函數(shù)

  • fopen(“文件路徑”,“文件的格式”)—>操作文件的格式
  • r 打開只讀文件,該文件必須存在。 r+ 打開可讀寫的文件,該文件必須存在。 rb 打開一個二進制文件,只讀。 rb+ 以讀/寫方式打開一個二進制文件。 w 打開只寫文件,若文件存在則文件長度清為0,即該文件內(nèi)容會消失。若文件不存在則建立該文件。 w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內(nèi)容會消失。若文件不存在則建立該文件。 wb 打開一個二進制文件,只寫。 wb+ 以讀/寫方式建立一個新的二進制文件。 a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾,即文件原先的內(nèi)容會被保留。 a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾后,即文件原先的內(nèi)容會被保留。 ab 打開一個二進制文件,進行追加 。 ab+ 以讀/寫方式打開一個二進制文件進行追加 。
  • fclose()
  • fread()
  • fwrite()
  • fgetc()
  • fputc()
  • fgets()
  • fputs()
  • 更多詳情請參考這里

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

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

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

    c++中的文件操作

  • 定義一個文件流對象
    • ifstream ifile(只輸入用)
    • ofstream ofile(只輸出用)
    • fstream iofile(既輸入又輸出用)
  • 使用文件流對象的成員函數(shù)打開一個磁盤文件,使得文件流對象和磁盤文件之間建立聯(lián)系
  • 使用提取和插入運算符對文件進行讀寫操作,或使用成員函數(shù)進行讀寫
  • 關閉文件
  • #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){// 這里會發(fā)現(xiàn)IO流寫整形比C語言那套就簡單多了,// C 語言得先把整形itoa再寫ofstream ofs(_configfile);ofs << info._ip << endl;ofs << info._port << endl;ofs.close();}void ReadText(ServerInfo& info){// 這里會發(fā)現(xiàn)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; } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結

    以上是生活随笔為你收集整理的c++中的IO流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。