输入输出
输出重定向
使得标准输出定向到某文件
#include<iostream>
using namespace std;
int main()
{
int x,y;
cin>>x>>y;
freopen("test.txt","w",stdout);
//将标准输出重定向到text.txt文件
//文件在当前该源代码在的目录下
if(y==0)
cerr<<"error."<<endl;
//调试的错误信息,通过cerr输出在CMD上
else
cout<<x/y;
return 0;
}
输入重定向
#include<iostream>
using namespace std;
int main()
{
double f;
int n;
freopen("test.txt","r",stdin);
//cin被重定向为test.txt中读取数据
//若文件不够值输入,则输出缺省值0;
cin>>f>>n;
cout<<f<<" "<<n<<endl;
return 0;
}
判断输入流结束
while(cin>>x)
{
//1.如果从文件输入,则读到文件尾部,输入流就算结束
//2.键盘输入,则在单独一行输入Ctrl+Z代表输入流结束
}
//在istream是将这个cin的值,强行转换类型为bool
istream类的成员函数
- getline(char* buf,int buf size,char delim)-读取一行
delim是分隔符,当读入数据读到delim字符,就自动结束
delim的缺省值是\n
该函数会自动在buf中读入数据的结尾添加’ \0 ’
bool eof() :判断输入流是否结束
int peek() :返回下一个字符,但不带走,就是看一下是啥
cin.peek()
istream& putback(char c):将字符ch放回到输入流
读出来了觉得后悔,可以塞回去
istream& ignore(int nCount=1,int delim=EOF):
从流中删掉最多nCount个字符,遇到EOF时结束
流操纵算子控制输出格式
流操纵算子:#include< iomanip >
整数流的基数:流操纵算子dec / oct / hex / setbase
- 设置进制 十进制 / 十二进制 / 十六进制 /
浮点数的精度(precision / setprecision)
保留多少位小数
cout.precision(5)
功能相同:
指定输出浮点数的有效位数(非定点方式输出)
非定点方式输出:指小数点不一定在个位数
指定输出浮点数的小数点后的有效位数(定点方式输出)
设置域宽(setw,width)
- 等效于%04d(要求有多少个位置,补什么等
用户自定义的流操纵算子
- 非定点方式输出
- 定点方式输出
- 取消固定的输出格式
- 输入输出设定域宽
综合例子
文件读写
创建文件
//创建文件
#include<fstream>
using namespace std;
int main()
{
ofstream outFile("clients.dat",ios::out|ios::binary);
//创建文件
/* clients.dat -要创建的文件的名字
ios::out -文件打开方式
ios::out -输出到文件,删除原有内容
ios::app -输出到文件,保留原有内容,总是在尾部添加
ios::binary -以二进制文件格式打开文件
*/
}
//创建文件
#include<fstream>
using namespace std;
int main()
{
ofstream fout;//可以先创建一个ofstream对象,再用open函数打开
fout.open("test.out",ios::out|ios::binary);
//判断打开是否成功
if(!fout)
cout<<"File open error!"<<endl;
//文件名可以给出绝对路径,也可以给出相对路径
//不交代路径信息,缺省情况下,在当前文件夹下找文件
}
读入例子
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v;
ifstream srcFile("in.txt",ios::in);
ofstream destFile("out.txt",ios::out);
int x;
while(srcFile>>x)
v.push_back(x);
sort(v.begin(),v.end());
for(int i=0;i<v.size();i++)
destFile<<v[i]<<" ";//把元素写入的操作
destFile.close();
srcFile.close();
//!!!把文件打开之后,一定要记得,把文件关闭
//防止在缓冲区,未能成功写入
return 0;
}
二进制文件读写
ifstream 和 fstream的成员函数:
istream& read(char * s,long n)
将文件读指针指向的地方的n个字节内容,读入到内存地址s,然后将文件都指针向后移动n字节
以ios::in方式打开文件时,文件读指针开始指向文件开头
istream& write(const char s,long n)*
写入文件