再学C++ Primer(8)-标准IO库

没看懂,以后上。

2012-3-26


C++的输入输出由标准库提供。标准库定义了一族类型,支持对文件和控制窗口等设备的读写。
主要有下面几个类型:
iostream
istream从流中读取
ostream:写到流中去
iostream:对流进行读写;从istream和ostream派生而来

fstream
ifstream:从文件中读取;由istream派生
ofstream:写到文件中去;由ostream派生
fstream:读写文件;由isstream派生

sstream
istringstream:从string队形中读取,由istream派生
ostringstream:写到string中去;由ostream派生
stringstream:对string对象进行读写;由iostream派生

流状态查询和管理
IO标准库管理了一系列的条件状态成员,用来标记给定的IO对象是否处于可用范围,或者碰到了哪种特定的错误。
可以用下列函数判定文件流状态:
is_open():判定流对象是否与一个打开的文件相联系,若是,返回trun,否则返回false;
good():刚进行的操作成功时返回true,否则返回false;
fail():与good()相反,刚进行的操作失败时返回true,否则返回false;
bad():如果进行了非法操作返回true,否则返回false;
eof():进行输入操作时,若到达文件尾返回true,否则返回false;


如下面的语句,就可以在保证输入正确的情况下执行循环体。

    int ival;
    while(cin>>ival)
    {
        //do something
        cout<<ival<<endl;
    }

文件流
首先看一个最简单的例子.


#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    string name;
    cin>>name;
    //打开一个输出流
    ofstream SaveFile("test.txt");
    //向流中输出内容
    SaveFile << "Hello,"<<name;
   //关闭流
    SaveFile.close();
}

编译运行,在可执行程序当前目录下会出现一个text.txt,里面的内容就是“Hello,XXX(你输入的内容)”。

再来实现文件的读取,并在文件的最后添加内容.

#include <iostream>
#include <fstream>
using namespace std;

int main()
{

    int i;

    //输出内容
    /*
    fstream File("test.txt",ios::in | ios::out);
    while(!File.eof())
    {
      //空格作为单词的分隔符进行读取
      File>>i;
      cout << i << endl;
    }*/
    //输入内容
    fstream File("test.txt",ios::out|ios::app);
    cout<<"Add number"<<endl;

    //File.seekg(ios::beg);
    while(cin>>i)
    {
        File<<i;
        File<<" ";
    }

    File.close();
}

各种打开模式
ios::app 使所有输出到相应文件的内容都添加到文件末尾,该值只能用于具有输出功能的文件。

ios::ate  使得在打开文件时能够定位到文件末尾

ios::binary  可以以二进制文件打开,默认情况下,所有文件都以文本方式打开。

ios::in  指定为输入

ios::out 制定我输出

ios::trunc 销毁具有相同名字的先前文件的内容,并且将文件长度截断为0,当使用ofstream创建一个输出流时任何先前存在的具有该文件名的文件将被自动截断

组合模式:
out|app 打开文件写操作,在文件尾写入

in|out 打开文件做读写操作,并定位于文件开头处

in|out|trunc 打开文件做读写操作,删除文件中已有的数据


字符串流

iostream标准库支持内存中的输入\输出,只要将流与存储在程序内存中的string对象捆绑起来即可。

书上的例子:

#include<sstream>
using namespace std;

int main()
{
int val1 = 512, val2 = 1024;
ostringstream oss_message;
oss_message << "val1:" << val1 << "\n" << "val2: " << val2 << "\n";
cout << oss_message.str() << endl;
}



例子的重点在于int型值自动转换为等价的可打印的字符串。

2012-11-9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值