C++ 输入输出流库

流的概念

  1. 流(stream):流操作,简称流
  2. 在计算机内存中,数据从内存的一个地址移动到另一个地址称为数据流动---流操作。
  3. 是通过缓冲区(buffer)机制实现的。
  4. 缓冲区(buffer):内存的一块区域,用做文件与内存交换数据。
  5. 在C++中,把输入设备,输出设备看成一种文件
  6. 标准输入流对象cin;标准输出流对象cout

头文件

  • iostream.h包含操作所有输入/输出流所需的基本信息
  1. 含有cin,cout,ceer,clog对象,提供无格式和格式化的I/O
  2. ceer与标准错误输出设备(默认为显示器)相关联(非缓冲方式)
  3. clog与标准错误输出设备(默认为显示器)相关联(非缓冲方式)
  • iomanip.h包含格式化I/O操纵算子,用于指定数据输入输出的格式
  • fsream.h处理文件信息,包括建立文件,读/写文件的各种操作接口

 使用操纵符进行输入输出格式控制

使用ios类中的成员函数进行输入输出格式控制时,每个函数的调用都要写一条语句,不能将其嵌入到输入输出语句中,C++提供了另一种I/O格式控制的方法

(一)C++预定义的操作符--iostream中的操作符

  • dec  以十进制输入输出整型数,用于输入输出
  • hex  以十六进制输入输出整型数,用于输入输出
  • oct   以八进制输入输出整型数,用于输入输出
  • ws   输入时跳过开头的空白符,用于输入
  • endl 插入一个换行符并且刷新输出流,用于输出
  • ends 插入一个空字符,用以结束一个字符串,用于输出

(二)C++预定义的操作符--iomanip中的操作符

  • flush  刷新一个输入流,用于输入
  • setbase(int n)把转换基数设置为n(n取0,8,10,16),n的缺省值(默认值)为0(以十进制形式输出)
  • resetiosflags(long f)  关闭由参数f指定的格式标志,用于输入输出
  • setiosflags(long f)  设置由参数f指定的格式标志,用于输入输出
  • setfill(char c)  设置填充字符
  • setprecision(int n)  设置输出数据的小数位数,用于输入输出
  • setw(int n)  设置域宽,用于输入输出

其中long f  格式标志

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	double values[]={1.2,4.9,6.23,5.10,11.11};
	char *names[]={"zhangsan","lisi","wangwu","zhaoliu","miao"};
	for(int i=0;i<5;i++)
	{
		cout<<setiosflags(ios::left)<<setw(10)<<setfill('*')<<names[i]<<resetiosflags(ios::left)<<setw(7)<<setfill(' ')<<values[i]<<endl;
	}
	double m=2.33333;
	cout<<setiosflags(ios::fixed)<<setprecision(3)<<m<<endl;
	return 0;
}

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	for(int n=1;n<=7;n++)
	{
		cout<<setfill(' ')<<setw(n)<<" "<<setfill('m')<<setw(15-2*n)<<"m"<<endl;
	}
	return 0;
}

文件I/O流

文件处理的三个流类

ifstream   文件输入流类,用于读文件

ofstream  文件输出流类,用于写文件

fstream  文件输入/输出流类,用于读写文件

程序中进行文件操作时加头文件"fstream.h"

ifstream in;

ofstream out;

fstream both;

文件的打开

open函数

ifstream in;
ofstream out;
fstream both;
//打开文件
in.open("d://test.cpp");//默认ios_base::in
//文件异常处理
if(!in)
{
return -1;
}
out.open("d://test2.cpp");//默认ios_base::out
if(out.fail()){return -1;}

both.open("d://test3.cpp",ios_base::in|ios_base::out);
char c;
while(in)
{
in.get(c);
out<<c;
}
//关闭文件
in.close();
out.close();

文件的读写

文本文件        in.get(char)      out.put(char ch);

二进制文件    read(),write()

fstream f("d://text.dat",ios::in|ios::out|ios::binary);
int i;
for(i=0;i<20;i++)
{
f.write((char*)&i,sizeof(int));
}
long pos=f.seekp();
for(i=20;i<40;i++)
{
f.write((char*)&i,sizeof(int));
}
f.seekg(pos);
f.read((char*)&i,sizeof(int));
cout<<"the data store is"<<i<<endl;
f.seekg(0,ios::beg);
for(i=0;i<40;i++)
{
f.read((char*)&i,sizeof(int));
cout<<i<<ends;
cout<<endl;
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值