1. I/O标准流类库
2. 输出流
(1)不需要手动构造的输出流对象
- cout:标准输出流
- cerr:标准错误输出流,没有缓冲,直接输出,常用于输出错误提示语句
- clog:类似cerr,但有缓冲,缓冲区溢出时溢出
(2)构造输出流对象
a. 调用输出流对象时指定对象名
ofstream myFile("filename");
b. 使用默认构造函数,然后调用open成员函数
ofstream myFile;
myFile.open();
(打开多个文件时,只有一个是打开的)
ofstream file;
file.open("FILE1");
//...
file.close();
file.open("FILE2");
//...
file.close();
(open函数可以直接传入字符串)
ofstream file;
std::string filename;
file.open(filename);
(3)控制输出格式
a. 输出宽度
width(): 设置输出宽度,在输出内容前默认加入空格占位(即右对齐)---fill():自定义填充字符
double values[]={1,10,100};
cout.fill("*");
for(int i=0;i<3;i++)
{
cout.width();// 调用时是用成员调用
cout<<values[i]<<endl;
}
setw():为同一行的不同项设置指定宽度,也可以使用set()运算符 #include<iomanip>
cout<<setw(6)<<arr[0]<<setw(4)<<arr[1]<<endl;
width()和setw()只影响下一个输出的对象(下一个域),但其他流格式选项保持有效直到发生改变,例如fill width()和setw()不截断数值,溢出的部分也会显示
b. 对齐方式
输出流默认为右对齐文本,可用setiosflags #include<iomanip>
for(int i=0;i<4;i++)
{
cout<<setiosflags(ios_base::left)<<setw(6)<<arr[i]<<endl;
}
ios_base::left是ios_base的静态常量setiosflags的影响持久,可用resetiosflags还原取消设置左对齐
cout<<resetiosflags(ios_base::left)<<setw(6)<<arr[i]<<endl;//
(此外若要避免之前设置的格式影响,还可使用put语句)
cout.put('A');
c. 精度
setprecision() #include<iomanip>
cout<<setiosflags(ios_base::fixed);//固定格式,不使用科学计数法
cout<<setiosflags(ios_base::scientific);//科学计数法形式
d. 进制
setiosflags(ios_base::oct);//八进制
setiosflags(ios_base::hex);//十六进制
setiosflags(ios_base::dec);//默认的十进制
3. 文件读写操作
(1)流程
包含头文件#include<fstream> --> 创建流对象 ofstream/ifstream -->打开文件 对象.open("文件路径",打开方式)-->读/写数据 对象<<"写/读入的数据" --> 关闭文件 对象.close()
(2)打开文件的方式
(3)在读文件过程中四种方式接收读取数据
char buf[1024]={0};
while(ifs>>buf)
{
cout<<buf;
}
char buf[1024]={0};
while(ifs.getline(buf))
{
cout<<buf;
}
string buf;
while(ifs>>buf)
{
cout<<buf;
}
char c;
while((c=ifs.gets())!=EOF)
{
cout<<c;
}
4. 字符串输出流
#include<sstream>输出流除了可以向屏幕和文件输出信息外,还可以生成字符串ostringstream类与ofstream类同为ostream的派生类,与ofstream相比只缺少open和close函数ostringstream类还有一个特殊的函数成员str,返回一个string对象,表示生成字符串的内容osstringstream类有两个构造函数
ostringstream os(流的打开模式);//当为默认的ios_base::out时可省略为缺省
ostringstream os(对象,流的打开模式);
<典例>将数值转为字符串
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
template<class T>
inline string toString(const T&v)
{
ostringstream os;
os<<v;
return os.str();
}
// 该模版可以将任意支持"<<"插入符的类型转换为字符串