IO流--小计清空缓冲区

IO流

设备:1、文件

​ 2、控制台

​ 3、特点的数据类型(stringstream)

C++中必须通过已定义好的类来处理IO(输入和输出)

1、文件流

文件流:对文件的输入输出

头文件:fstream

类库: istream:对文件的输入(读文件)

​ ostream:对文件的输出(写文件)

​ fstream:对文件的输入输出

2、对文件的读写

文件的打开方式:

模式标志描述
ios::in读方式打开文件
ios:out写方式打开文件
ios::trunc如果此文件已经存在, 就会打开文件之前把文件长度截断为0
ios::app尾部最加方式(在尾部写入)
ios::ate文件打开后, 定位到文件尾
ios::binary二进制方式(默认是文本方式)

以上打开方式, 可以使用位操作 | 组合起来

3、文件简单操作

,open打开文件
.close关闭文件
.eof()判断是否结束
.open(ios::binary)打开二进制文件
.write((char*)&age, sizeof(age))–(假如输入年龄)写二进制文件
.read((char*)&age, sizeof(age))读二进制文件
.is_open( )文件流是否打开成功
.fail( )流的failbit或者badbit被置位时, 返回tru
failbit出现非致命错误,可挽回, 一般是软件错误
badbit出现致命错误, 一般是硬件错误或系统底层错误, 不可挽回
.bad( )badbit置位时, 返回true
.good( )处于有效状态时, 返回true
.clear( )所有状态都被复位

4、格式流输入输出文件

写文件:
		ofstream outfile;
		stringstream s;
		s << "name:" << name << "age:" << age << endl;
		outfile << s.str();
读文件:
	string line;
	ifstream infile;
	getline(infile, line);//读一行
	sscanf_s(line.c_str(), "name:%s age:%d", name, sizeof(name),&age);//用C语言方式,必须与写文件格式一直,否则出现异常
	cout << "name:" << name << "age:" << age << endl;
		

5、文件流定位

1、seekg

seekg( off_type offset, //偏移量

ios::seekdir origin ); //起始位置

作用:设置输入流的位置

参数1: 偏移量

参数2: 相对位置

beg 相对于开始位置

cur 相对于当前位置

end 相对于结束位置

infile.seekg(-50, infile.end);//从最后读50个

2、tellg

返回该输入流的当前位置(距离文件的起始位置的偏移量)

// 先把文件指针移动到文件尾
	infile.seekg(0, infile.end);

3、seekp

设置该输出流的位置

outfile.seekp(4, outfile.beg);

6、小计

count常常取:

std::numeric_limitsstd::streamsize::max() 相当于IO流的最大字符个数

常见用法:(把标准输入缓冲区cin的所有数据都清空)

cin.ignore(std::numeric_limits::max(), ‘\n’);

// 如果输入错误, 需要反复重复输入
		while (cin.fail()) {
			cin.clear(); //清除错误标志
			//cin.sync();  在vs中无效
			// 把cin的输入缓冲区中的数据全部清除,直到遇到回车符
			cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
			cout << "输入错误,请重新输入:";
			cin >> num;
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值