IO流
设备:1、文件
2、控制台
3、特点的数据类型(stringstream)
C++中必须通过已定义好的类来处理IO(输入和输出)
1、文件流
文件流:对文件的输入输出
头文件:fstream
类库: istream:对文件的输入(读文件)
ostream:对文件的输出(写文件)
fstream:对文件的输入输出
2、对文件的读写
文件的打开方式:
模式标志描述ios::in读方式打开文件ios:out写方式打开文件ios::trunc如果此文件已经存在, 就会打开文件之前把文件长度截断为0ios::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被置位时, 返回trufailbit出现非致命错误,可挽回, 一般是软件错误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
cout << "输入错误,请重新输入:";
cin >> num;
}
好文链接
发表评论