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::max(), '\n');
			cout << "输入错误,请重新输入:";
			cin >> num;
		}

你可能感兴趣的:(C++,ios)