※标准流的设备名
※成员函数ignore
#include
using namespace std;
int main()
{
string s;
cout<<"请输入一串字符串";
//1.忽略输入缓存区中的前8个字符
//2.在前8个字符中存在结束字符,那么就忽略
//输入缓冲区 结束字符 之前的字符
cin.ignore(8,' ');//设置' '为结束字符
cin>>s;
cout<<"string s="<
运行结果:
※成员函数putback
#include
using namespace std;
int main()
{
char ch;
cin.putback('a');
cout<<"请输入一个ch数据:";
cin>>ch;
cout<<"string ch="<
运行结果:
※成员函数peek
#include
using namespace std;
int main()
{
int i;
string s;
//输入缓冲区中第一个字符
cout<<"strart"<='0')&&(ch<='9'))
{
cin>>i;//"123abc" i=123
cout<<"int i="<>s;
cout<<"string s="<
运行结果:
**※整数流的基数:流操纵算子dec、oct、hex和setbase **
**整数通常被解释为十进制(基数为10)整数。如下方法可改变流中整数的基数: **
- 插人流操纵算子hex可设置十六进制基数(基数为16)、
- 插人流操纵算子oct可设置八进制基数(基数为8)、
- 插人流操纵算子dec可恢复十进制基数。
**用流操纵算子setbase来改变基数,使用setbase或其他任何参数化的操纵算子都必须在程序中包含头文件iomanip
如果不明确地改变流的基数,流的基数是不变的 **
#include
#include
using namespace std;
int main()
{
int i=11;
cout<
运行结果:
※设置浮点数精度(precision、setprecision)
可以用流操纵算子setprecision或成员函数percision控制小数点后面的位数。
- 设置了精度以后,该精度对之后所有的输出操作都有效,直到下一次设置精度为止。
- 无参数的成员函数percision返回当前设置的精度。
#include
#include
using namespace std;
int main()
{
double roof2=3.141592666;
for(int places=0;places<=9;places++)
cout<
运行结果:
※设置域宽(setw、width)
- 成员函数ios.width设置当前的域宽(即输入输出的字符数)并返回以前设置的域宽。
- 如果显示数据所需的宽度比设置的域宽小,空位用填充字符填充。
- 如果显示数据所需的宽度比设置的域宽大,显示数据并不会被截断,系统会输出所有位。
- 域宽设置仅对下一行流读取或流插入操作有效,在一次操作完成之后,城宽又被置回0
- 未对所处理的输出数据提供足够的域宽时,输出数据将按需要的域宽进行输出,有可能产生难以阅读的输出结果。
例题1:
#include
#include
using namespace std;
int main()
{
int t1[5]={12345,1,3333,33,7777};
int t2[5]={12,4,67,54645,653};
for(int i=0;i<5;i++)
{
cout.width(6);//设置宽度 类型,作用相当于\\t
cout<
例题1:
运行结果:
例题2:
#include
#include
using namespace std;
int main()
{
char n[30]={0};
cin.width(5);
while(cin>>n)
{
cout<<"n="<
例题2:
运行结果:
※用户自定义的流操纵算子
#include
#include
using namespace std;
ostream& tab(ostream& output)//作用相当于\\t
{
return output<<'\\t';
}
int main()
{
cout<<'a'<
运行结果:
※cin.good
#include
#include
using namespace std;
#include
int main()
{
int a;
int b;
cin>>a;
cout<<"a="<::max(),'\\n');清除输入缓存区内的所有数据 Linus下的
}
cout<<"cin2="<>b;
cout<<"b="<
运行结果:
文件
文件打开
- 使用构造函数打开
创建流对象时直接打开文件
eg: ofstream ofile(const char *filename, openmode); - 使用成员函数open打开文件
eg: ofstream ofile;
ofile.open(const char *filename, openmode) - 文件类的默认打开方式
打开文件时,没有指定打开模式时,使用默认的打开方式;
ofstream: ios::out | ios::trunc
ifstream: ios::in
fstream: ios::in | ios::out
对于ifstream 的流对象在打开文件时即使指定的模式中没有显示的标明ios::in 模式,ios::in 标识也一直存在
对于ofstream 的流对象打开的文件即使指定的模式中没有显示的标明ios::out 模式,ios:;out 标识也是一直存在的
---------------------------------------------------------------------------------------------------- openmode 文件打开模式 - ios::in 输入(读)模式打开文件
- ios::out 输出(写)模式打开文件
- ios::app 追加模式打开文件
- ios::trunc 若文件已经存在则清空文件的模式打开文件
- ios::binary 二进制方式打开文件
这些标识可以单独使用,也可以组合使用,中间用”或“ 运算符 ”|“ 间隔。
fstream file;
file.open(“example”, ios::out | ios::app | ios::binary);
文件关闭
当文件的读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。关闭文件时需要调用成员函数close( ),它负责将缓存中的数据排放出来并关闭文件。
这个函数一旦被调用,原来的流对象就可以被用来打开其他的文件了,这个文件也可以重新被其他的进程访问了。
include
fstream file;
file.open(“example”, ios::out | ios::app | ios::binary);
if(file !=NULL) {
cout<<“open failed”<
//……. 文件操作
file.close();
在文件中输入
#include
#include
using namespace std;
#include
int main()
{
ofstream ofile("zyz1");//打开文件
ofile<<"pear"<<" "<<4.5;//在文件中输入
ofile.close();//关闭文件
return 0;
}
读文件内容:
#include
#include
using namespace std;
#include
int main()
{
ifstream ifile("zyz1");
char sztext[20];
double price;
ifile>>sztext>>price;
cout<
运行结果:
以二进制的形式在文件中存储
文件write
#include
#include
using namespace std;
#include
int main()
{
ofstream ofile("zyz2.txt",ios::out|ios::binary);
char temp[20]="nihao";
ofile.write(temp,20);
ofile.close();
return 0;
}
文件read
#include
#include
using namespace std;
#include
int main()
{
ifstream ifile("zyz2.txt",ios::in|ios::binary);
char temp[20];
ifile.read(temp,20);
cout<
运行结果:
流指针相关函数
- tellg( )和 tellp( )
返回一个pos_type类型,即整数,分别代表当前读指针(get) 和 写指针(put) 的位置
- seekg( pos_type position ) 和 seekp( pos_type position )
流指针被改变为指向文件开始计算的一个绝对位置,传入的参数类型与函数tellg 和 tellp 的返回值类型相同
- seekg( offset, seekdir) 和 seekp( offset, seekdir)
从由参数seekdir 设定的位置开始计算一个位移 offset,其中seekdir的值可以是: ios::beg(流开始的位置),ios::cur(流当前的位置),ios::end(流末尾的位置)
#include
using namespace std;
#include
int main()
{
ofstream ofile("exam1.txt",ios::out|ios::binary);
char temp[20]="nihao";
ofile.write(temp,20);
ofile.close();
ifstream ifile("exam1.txt");
if(NULL==ifile)
{
cout<<"打开文件失败"<
运行结果: