关闭

C++ iostream标准库

808人阅读 评论(0) 收藏 举报
分类:
  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

1
1
查看评论

C++标准IO库(iostream,fstream,sstream)

一、功能: iosstream定义读写控制窗口的类型; fstream定义读写已命名文件的类型; sstream多定义的类型则用于读写存储在内存中的string对象。 二、注意:IO对象不可复制或赋值,也就无法为参数或返回值。 三、基本IO类的继承结构: 四、IO标准库的条件状态: ...
  • tao01230
  • tao01230
  • 2016-05-04 19:53
  • 1077

C++中的标准库与非标准库的区别

C++中我们要用到标准输出,就需要调用cout,那么,cout这条语句怎么使用呢?例如: #include //头文件 int main()  { std::cout return 0; } #include   int main() { cout ret...
  • mark_yangs
  • mark_yangs
  • 2015-03-12 23:17
  • 1242

c++ stl iostream 使用笔记一

        我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作...
  • winki7
  • winki7
  • 2005-12-16 16:52
  • 2134

IOstream 标准库

C++ 的输入/输出(input/output)由标准库提供。 标准库定义了一族类型,支持对文件和控制窗口等设备的读写(IO)。 还定义了其他一些类型,使 string对象能够像文件一样操作,从而使我们无须 IO 就能实现数据与字符之间的转换。 这些 IO 类型都定义了如何读写内置数据类型的值...
  • daguge1
  • daguge1
  • 2015-05-14 12:31
  • 148

C++的iostream标准库介绍

 作者:管宁 C++的iostream标准库介绍 0 为什么需要iostream 1 iostream: istream 和 ostream 2 fstream: ifstream 和 ofstream 3 str...
  • ygj149078299
  • ygj149078299
  • 2006-08-24 20:49
  • 879

C++ 工程实践(7):iostream 的用途与局限

C++ 工程实践(7):iostream 的用途与局限 陈硕 (giantchen_AT_gmail) http://blog.csdn.net/Solstice http://weibo.com/giantchen 陈硕关于 C++ 工程实践的系列文章: ht
  • Solstice
  • Solstice
  • 2011-07-17 15:08
  • 29594

C++的iostream标准库介绍

C++的iostream标准库介绍 文章来源: http://www.cndev-lab.com  ...
  • chenhu_doc
  • chenhu_doc
  • 2006-08-10 15:16
  • 1834

C++中头文件<iostream>介绍

C++中头文件<iostream>介绍
  • fengbingchun
  • fengbingchun
  • 2017-03-19 16:13
  • 1797

VS2010 C++中找不到iostream了怎么办

http://stackoverflow.com/questions/4594292/vs-2010-error-cannot-open-file-iostream VS 2010 error - cannot open file “iostream”   #include usi...
  • passtome
  • passtome
  • 2012-06-21 14:33
  • 1872

C++的iostream标准库介绍+使用详解(转)

0 为什么需要iostream 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的 stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作为一个c++的标准库组件提供给程序员使用。   io...
  • dgyanyong
  • dgyanyong
  • 2015-06-16 14:02
  • 4654
    个人资料
    • 访问:184005次
    • 积分:3453
    • 等级:
    • 排名:第11450名
    • 原创:138篇
    • 转载:11篇
    • 译文:11篇
    • 评论:23条
    我的微信
      IT培训
      分享计算机相关信息技术、生活感悟。
    博客专栏