C++之标准IO库

C++之标准IO库

 

一、概述

C++的输入/输出(input/output)由标准库提供。

多种IO标准库工具:

  • istream,提供输入操作
  • ostream,提供输出操作
  • cin:读入标准输入的istream对象
  • cout:写到标准输出的ostream对象
  • cerr:输出标准错误的ostream对象。常用语程序错误信息
  • >>,用于从istream对象中读入输入
  • <<,用于把输出写到ostream对象中
  • getline,功能是从istream对象读取一个单词,然后写入string对象中

二、面向对象的标准库


 

1.国际字符的支持

流类(stream class)读写都是由char类型组成的流。

标准库还定义了一组相关的类型,支持wchar_t类型。每个类都加上“w”前缀以此区分。

控制窗口读写:wostream,wistream,wiostream

文件输入输出:wofstream,wifstream,wfstream

String输入输出:wostirngstream,wistringstream,wstringstream

对象:wcin,wcout,wcerr

 

2.IO对象不可复制或赋值

流对象不能存储在vector或其他容器中。

形参或返回类型也不能为流类型,如果需要,则必须传递或返回指向该对象的指针或引用

if(cin)
	//ok to use cin, it is in a valid state
while(cin >> word)
	//ok:read operation successful…

流的状态由bad,fail,eof,good操作揭示。

bad:系统级的故障

fail:可恢复的错误

eof:遇到文件结束符,通常还会设置fail

clear:重设为有效条件

setstate:打开某个指定的条件,用于表示某个问题的发

 

1.条件状态的访问

rdstate成员函数返回一个iostate类型的值,该值对于于流当前的整个条件状态

istream::iostate old_state = cin.rdstate();

2.多种状态的处理

 

is.setstate(ifstream::badbit | ifstream::failbit);

三、输出缓冲区的管理

1.输出缓冲区的刷新

cout << “hi” << flush;  //flushes the buffer;add no data
cout << “hi” << ends;  //inserts a null,then flushes the buffer
cout << “hi” << endl;  //inserts a newline,then flushes the buffer

2.unitbuf操作符

如果需要刷新所有输出,最好使用unitbuf操作符。

 

cout << unitbuf << “first” << “second” << nonunitbuf; 

3.将输入和输出绑定一起

任何读输入流的尝试都将首先刷新其输出流关联的缓冲区

 

四、文件的输入和输出 

fstream头文件定义了三种支持文件IO的类型:

ifstream,istream派生而来,提供读文件的功能

ostream,ostream派生而来,提供写文件的功能

fstream,iostream派生而来,提供读写同一个文件的功能

 

fstream还定义了两个自己的新操作—openclose

 

1.文件流对象的使用

 

//假设ifile和ofile是存储希望读写的string对象
ifstream infile(ifile.c_str());
ofstream outfile(ofile.c_str());
//捆绑要读写的文件对象
ifile.open(“in”);
otfile.open(“out”); 

IO标准库是使用C风格字符串的 

1)检查文件打开是否成功

if (infile)这种方式来检查

2)将文件流与新文件重新捆绑

 

ifstream infile(“in”);
infile.close();
infile.open(“next”);

3)清除文件流的状态

如果需要重用文件流读写多个文件,必须在读另外一个文件之前调用clear清楚流的状态

 

2.文件模式

所有文件都可以使用atebinary模式打开。

ofstream对象指向out模式等效于同时指定了outtrunc模式。

1)对同一个文件作输入和输出运算

同时打开输入和输出模式:

 

fstream inOut (“copyOut”, fstream::in | fstream::out);

 

2)模式是文件的属性而不是流的属性

只要调用open函数,就要设置文件模式,其模式的设置可以是显示的也可以是隐式的

3)打开模式的有效组合

所有组合可以添加ate模式。 


3.一个打开并检查输入文件的程序

 

Ifstream open_file(ifstream &in, const string &file)
{
              in.close();
              in.clear();
              in.open(file.c_str());
              return in;
} 

 

五、字符串流 

1.stringstream对象的使用

 

string line,word;
while (getline(cin,line)){
              istringstream stream(line);
              while(stream >> word){
      //TO DO
}
}

2.stringstream提供的转换和/或格式化

常见用法是,需要在多种数据类型之间实现自动格式化使用该类类型

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值