亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中IO流操作實例分析

發布時間:2022-07-02 13:35:39 來源:億速云 閱讀:135 作者:iii 欄目:開發技術

這篇“C++中IO流操作實例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C++中IO流操作實例分析”文章吧。

1.標準輸出輸入流-控制臺流(iostream類) 

cin實際上是一個標準輸入流對象(類對象),常用的方式有,cin>>(cin.operator>>()), cin.get(), cin.getline()(用法:cin.getline(char s[], int nLength))

或者在std命名空間下,有一個單獨的getline()函數,但是該函數時使用string對象作為參數的,即:getline(cin, str)

cout是標準輸出流對象(類對象),cout<<

cout cin printf scanf(格式化輸入輸出)比較

總結:c++中盡量用cin和cout

//c_str()就是把string類對象轉換成和c兼容的char*類型。
//這是為了與c語言兼容,在c語言中沒有string類型
//故必須通過string類對象的成員函數c_str()把string 對象轉換成c中的字符串樣式
//例如
	string a = "hellofjifj";
	printf("%s\n", a.c_str());
	//printf("%s\n", a);//這樣會有問題

2. 文件流(I/O操作)

在文件流中提供了三個派生類對文件數據進行操作(注意這里是類,不像控制臺提供的是類對象)

  • ofstream:輸出,即寫文件,由ostream引申而來

  • ifstream:輸入,即讀取文件,由istream引申而來

  • fstream :輸入輸出,同時讀寫操作,由iostream引申而來

文件的類型:文本文件 和 二進制文件

文件讀寫的步驟:

  • 包含的頭文件:#include <fstream>

  • 創建流

  • 打開文件(文件和流關聯)

  • 讀寫 (寫操作:<<,put( ),write( )讀操作:>> , get( ),getline( ), read( ))

  • 關閉文件:把緩沖區數據完整地寫入文件, 添加文件結束標志, 切斷流對象和外部文件的連接

文本文件

使用<< >> 進行讀寫

<< 能實現以行為單位寫入文件

>> 不能一行為單位讀入內存,而是以單詞為單位。總是以空格、Tab、回車結束

    ofstream OpenFile("file.txt");  
  if (OpenFile.fail())  
  {  
    cout<<"打開文件錯誤!"<<endl;  
    exit(0);  
  }  
    OpenFile << "abc def ghi";//把內容寫入file文件  
  OpenFile.close();
    const int len=20;  
    char str[len];  
    ifstream OpenFile("file.txt");  
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile >> str;  
    cout << str << endl;  
    OpenFile.close(); //str的內容為abc,而不是abc def ghi(見空格停止)
getline()讀取一行

getline():以行為單位讀入內存,能一次讀入一行

函數原型:istream &getline( char *buffer, streamsize num );

getline( )函數用于從文件讀取num個字符到buffer(內存)中,直到下列情況發生時,讀取結束:

  • num個字符已經讀入

  • 碰到一個換行標志

  • 碰到一個EOF

    const int len=20;  
    char str[len];  
    ifstream OpenFile("file.txt");  
    if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.getline(str,20);  
    cout << str << endl;  
    OpenFile.close();//運行結果:str的內容為abc def ghi (一直把一行讀完)
get() put()進行單個字符讀寫

ostream& put (char c);

函數功能:使用 put( )函數,向文件中寫入字符

    char ch='1';  
    ofstream OpenFile("file.txt");  
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.put(ch); // 把字符1寫入文件
    OpenFile.close();

istream& get (char& c);

函數功能:使用 get( )函數,從文件中讀取字符

    char ch;  
    ifstream OpenFile("file.txt");  
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.get(ch);  
    cout << ch; //把字符1從文件中讀到ch(內存)中
    OpenFile.close();

二進制文件讀寫

get() put()進行單個字節讀寫

ofstream &put(char ch)

在內存中寫入一個字節到文件

    char ch='a';  
    ofstream OpenFile("file.txt",ios::binary);  
    //以二進制的方式處理,在打開時要用 ios::binary 顯式聲明
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.put(ch);  
    OpenFile.close();

ifstream &get(char ch)

在文件中讀取一個字節到內存

    char ch;  
    ifstream OpenFile("file.txt",ios::binary);  
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.get(ch); // 從文件中讀取一個字符
    cout << ch;  
    OpenFile.close();
read() write()多個字節讀寫

ostream & ostream :: write ( char * buf , int n ) ;

功能:把buf指向的內容取n個字節寫入文件

參數說明:buf表示要寫入內存的地址,傳參時要取地址。n表示要讀入字節的長度

注意:

  • 該函數遇到空字符時并不停止,因而能夠寫入完整的類結構

  • 第一個參數一個char型指針(指向內存數據的起始地址),與對象結合使用的時候,要在對象地址之前要char做強制類型轉換

    char ch[12]="12 3 456 78";  
    ofstream OpenFile("file.txt");  
  if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.write(ch, 12);  
    OpenFile.close();

istream & read ( char * buf , int n ) ;

功能:從文件中提取 n 個字節數據,寫入buf指向的地方中

    char ch[12];  
    ifstream OpenFile("file.txt");  
    if (OpenFile.fail())  
    {  
        cout<<"打開文件錯誤!"<<endl;  
        exit(0);  
    }  
    OpenFile.read(ch,12);  
    cout << ch;  //運行結果:數組ch的內容為12 3 456 78
    OpenFile.close();

注意事項

(1)程序不再使用文件時,為什么要關閉文件?

因為:

  • 文件緩沖區是一塊小的內存空間.

  • 操作系統限制同時打開的文件數量

注意:close ( ) 函數關閉文件,但流對象仍然存在。

(2)文件的默認打開方式為文本文件,要是想以二進制的方式處理,在打開時要用 ios::binary 顯式聲明。

(3)針對文本文件操作時,get函數和>>的區別:

  • 在讀取數據時,get函數包括空白字符(遇空白字符不停止讀取)

  • >>在默認情況下拒絕接受空白字符(遇到空白符停止讀取)

(4)文本文件的讀寫常使用的方法:使用<<寫入文件,使用getline 和 >> 讀到內存

二進制文件的讀寫常使用的方法:使用istream 類的成員函數read 和write 來實現,

3.字符串輸入輸出流(sstream)

其相應的派生類有istringstream類、ostringstream類、iostringstream類

sprintf sscanf 和 stringstream的使用

其實是整型和字符創類型的相互轉化:序列化(轉成字符串)和反序列化(將字符串中數據提取處理)

C當中用法:sprintf和sscanf函數

C++中用法:字符串流

struct ServerInfo//要讀些的信息類
{
	char _ip[20];
	int  _port;
};
	//C當中用法
    //將info中數據轉成字符串并存入buff中
	ServerInfo info = { "192.0.0.1", 8000 };
	char buff[128];//buff的大小不好確定
	sprintf_s(buff, "%s %d", info._ip, info._port);// 序列化,轉成字符串存入buff中
	
    //將buff中數據格式化輸出到rinfo中
	ServerInfo rinfo;
	sscanf(buff, "%s%d", rinfo._ip, &rinfo._port);// 反序列化,將字符串buff中數據轉成規定格式
	//空格間隔開了
	//C++用法
	//將info中數據轉成字符串并存到buff中
    ServerInfo info = { "192.0.0.1", 8000 };
	stringstream ssm;//字符串流對象
	ssm << info._ip <<" "<<info._port;//轉成字符串
	string buff = ssm.str();//查看字符串
	//從字符串提取至rinfo
	stringstream ssm;
	ssm.str("127.0.0.1 90");//這兩行直接按照下面的寫法也行
	//stringstream ssm("127.0.0.1 90");
	ServerInfo rinfo;
	ssm >> rinfo._ip >> rinfo._port;

補充內容:C/C++中int和字符串類型的轉換

string轉int
  • atoi(c庫函數、ascll to integer)

  • strtol(c庫函數,字符串轉成長整型)

  • stoi(stoi是C++的函數,頭文件:#include < string >)

int轉string
  • itoa(c庫函數)

  • to_string(C++11的函數,可以適應8種類型的重載,將其轉換為string,頭文件:#include < string >)

以上就是關于“C++中IO流操作實例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东平县| 平昌县| 吉林市| 宁河县| 南通市| 兰溪市| 中山市| 嵩明县| 黄平县| 冷水江市| 孟州市| 常德市| 八宿县| 昌宁县| 马山县| 黑龙江省| 阿瓦提县| 吐鲁番市| 延津县| 梨树县| 嘉定区| 恩施市| 彰化县| 阿尔山市| 永顺县| 南雄市| 荣昌县| 屏山县| 东乌| 迭部县| 景宁| 洛隆县| 寿光市| 旬阳县| 禹州市| 普陀区| 云龙县| 清涧县| 大关县| 朝阳区| 盐池县|