C++ iostream標準庫

來源:互聯網
上載者:User

標籤:

  1. iostream分為輸入輸出資料流,即istream和ostream,其針對控制視窗的輸入輸出;常見的輸入輸出函數有cin cout cerror;
  2. fstream主要是來解決檔案操作流,也是iostream的衍生類(包含輸入輸出),我們知道的有ifstream和ofstream;
  3. sstream主要是來解決c風格的字串操作流,也是iostream的衍生類(包含輸入輸出),我們知道的有istrstream和ostrstream;如果想解決c++字串的流,就要使用stringstream;
以下用存取檔案的例子來說明ifstream和ofstream:
void write_file(){    ofstream myfile("c:\\1.txt", ios::app, _SH_DENYNO);    if (myfile.fail())    {        cout << "檔案開啟失敗";        myfile.open("c:\\1.txt", ios::out | ios::trunc, _SH_DENYNO);    }    myfile << "中國軟體開發實驗室" << endl << "網址:" << "www.cndev- lab.com" << endl;    myfile.close();}void read_file(){    ifstream myfile("c:\\1.txt", ios::out, _SH_DENYNO);    char ch;    string content;    while (myfile.get(ch))    {        content += ch;    }    cout << content << endl;    myfile.close();}/** * iostream整合輸入輸出 */void read_write(const string &in_path,const string &out_path){    ifstream in_file(in_path, ios::out, _SH_DENYWR);    char cc;    string content;    while (in_file.get(cc))    {        content += cc;    }    ofstream out_file(out_path, ios::out, _SH_DENYWR);    out_file << content << endl;    out_file.close();    in_file.close();}
ifstream和ofstream解決了從流到char *的轉換,代碼如下:
using namespace std;void read_str(){     char *name = "www.cndev-lab.com";    istrstream is(name, strlen(name) + 1);    char read;    while (is.get(read))    {        cout << read;    }    cout << endl;}void write_str(){    int arraysize = 1;    char *pbuffer = new char[arraysize];    ostrstream ostr(pbuffer, arraysize, ios::out);    ostr << arraysize << ends;//使用ostrstream輸出到流對象的時候,要用ends結束字串     cout << pbuffer;    delete[] pbuffer;}/** * stringstream解決類型轉換 */void test_stringstream(){    stringstream ost("hello world");    ost.put(‘\n‘);    ost << "OK";    cout << ost.str() << endl;    //stringstream sstr; //--------int轉string-----------     //int a = 100; string str;    //sstr << a;    //sstr >> str;    //cout << str << endl; //--------string轉char[]--------     //sstr.clear();    ////如果你想通過使用同一stringstream對象實現多種類型的轉換,    ////請注意在每一次轉換之後都必須調用clear() 成員函數。     //string name = "colinguan";    //char cname[200];    //sstr << name;    //sstr >> cname;    //cout << cname;}
對於檔案的開啟 傳輸狀態 ,c++定義了如下兩種方式第一種,通過狀態值判斷
  • goodbit 無錯誤
  • Eofbit 已到達檔案尾
  • failbit 非致命的輸入/輸出錯誤,可挽回
  • badbit 致命的輸入/輸出錯誤,無法挽回
/** *  通過狀態修改 */void stream_state(){    int a=0;     cin >> a;     cout << cin.rdstate() << endl;     if (cin.rdstate() == ios::goodbit)     {         cout << "輸入資料的類型正確,無錯誤!" << endl;     }     if (cin.rdstate() == ios_base::failbit)     {         cout << "輸入資料類型錯誤,非致命錯誤,可清除輸入緩衝區挽回!" << endl;     }}
第二種,通過方法判斷

bool bad(); bool eof();
bool fail(); bool good();

void stream_state_method(){    /*    int a=0; cin >> a;    cout << cin.rdstate() << endl;    cin.clear(ios::goodbit);    cout << cin.rdstate() << endl;    */    int a=0;     while (1) {        cin >> a;        if (cin.fail()){            cout<<"輸入有錯!請重新輸入"<<endl;            cin.clear();            cin.get();        }        else{            cout<<a; break;        }    }}

參考檔案:http://www.cppblog.com/yuqilin1228/archive/2010/03/26/110620.html

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

C++ iostream標準庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.