百度推广官网网站,邮箱登录入口qq网页版,企业网站规划书,网址生成短链接1. 二进制文件的读与写ofstream fout; ifstream fin;
——学习把结构体类型写到二进制文件中。 代码实现#xff1a;
/*
_4.cpp 学习总结 视频学习C_Primer_Plus_17_6
1. 二进制文件的读与写
2. 写操作#xff1a;fout类比cout操作#xff0c;cout能操作的fout也适用
3. 易…1. 二进制文件的读与写ofstream fout; ifstream fin;
——学习把结构体类型写到二进制文件中。 代码实现
/*
_4.cpp 学习总结 视频学习C_Primer_Plus_17_6
1. 二进制文件的读与写
2. 写操作fout类比cout操作cout能操作的fout也适用
3. 易错点1读写操作时读in写out不可写错易错点2写操作时添加要求时貌似或(|)与或之间的顺序也要注意
4. fout.write((char *) p1, sizeof p1);解释两个参数参数1地址。p1表示地址(char *)强转固定参数2字节大小。读函数同理类知识中对这个两个函数有详细讲解
*/
#include iostream
#include fstream
#include iomanip //输出格式用//内联函数吃没用的字符
inline void eatline() { while(std::cin.get() ! \n) continue; }struct Planet
{char name[20];double papolation;double g;
};//结构体星球const char* filename plants.dat;int main()
{using namespace std;//写进二进制文件ofstream fout(filename, ios_base::out | ios_base::app | ios_base::binary);Planet p1; cout 以空白行结束输入 endl;cin.get(p1.name, 20);while(p1.name[0] ! \0){eatline();//吃没用的字符//输入星球数据cin p1.papolation;cin p1.g;eatline();//吃没用的字符//写操作fout.write((char *) p1, sizeof p1);cout 以空白行结束输入 endl;cin.get(p1.name, 20);}fout.close();//读二进制文件ifstream fin;fin.open(filename, ios_base::in | ios_base::binary);if(!fin.is_open()){cout 打不开此文件 filename endl;exit(EXIT_FAILURE);}cout fixed;//不用科学计数法显示cout.precision(2);//精度保留两位小数cout.setf(ios_base::showpoint);//显示小数点不写(输入135.0显示135)cout 读文件并显示 endl;while(fin.read((char *) p1, sizeof p1)){cout Name: p1.name endl;cout Population: p1.papolation endl;cout G: p1.g endl;}fin.close();return 0;
}2. 在二进制文件的任意位置进行存储或者修改 fstream finout;
——修改二进制文件中的结构体内容。 代码实现
/*
_5.cpp 学习总结 视频学习C_Primer_Plus_17_7
1. 修改二进制文件中的结构体内容planet.dat二进制文件已存在(内容为4个Planet)该示例将完成以下工作a. 询问要修改哪条记录b. 显示未修改的记录 c. 显示已修改的记录2. seekg()将输入指针移至指定的文件位置seekp()将输出指针移到指定文件位置原型1seekg(streampos) streampos place rec * sizeof p1;原型2seek(streamoff, ios_base::seekdir) 未应用
3. fstream finout; 读写都可以
*/
#include iostream
#include fstream
#include iomanip //输出格式用//内联函数吃没用的字符
inline void eatline() { while(std::cin.get() ! \n) continue; }struct Planet
{char name[20];double papolation;double g;
};//结构体星球const char* filename plants.dat;int main()
{using namespace std;Planet p1;fstream finout;//打开二进制文件可能读也可能写planet.dat二进制文件已存在内容为4个Planetfinout.open(planets.dat, ios_base::in | ios_base::out | ios_base::binary);if(!finout.is_open()){cout 打不来此文件planets.dat endl;exit(EXIT_FAILURE); }//修改第 rec 个结构体的内容rec(0,1,2,3...)place即是第rec的首地址cout 输入要修改的第几个结构体内容(0,1,2,3) ;int rec; cin rec; eatline();streampos place rec * sizeof p1;//文件输出指针重新定位finout.seekg(place);//把该位置的内容存到p1内finout.read((char *)p1, sizeof p1);//显示该位置本来内容cout 显示该位置本来内容: endl;cout Name: p1.name endl;cout Poluation: p1.papolation endl;cout G: p1.g endl;//输入要修改的的内容cout 输入要修改的的内容 endl;cout Name: ;cin p1.name;cout Population: ;cin p1.papolation;cout G: ;cin p1.g;eatline();//文件输入指针重新定位然后写入finout.seekp(place);finout.write((char *)p1, sizeof p1);//再次显示该位置内容cout 再次显示该位置内容 endl;finout.seekg(place);finout.read((char *)p1, sizeof p1);cout Name: p1.name endl;cout Poluation: p1.papolation endl;cout G: p1.g endl;return 0;
}3. 知识点。
常量含义ios_base::in打开文件以便读取ios_base::out打开文件ios_base::out打开文件以便写入ios_base::app追加到文件末尾ios_base::trunc如果文件存在清空文件内容ios_base::binary二进制文件
C模式C模式含义ios_base::in“r”打开文件以便读取ios_base::out“w”等价于ios_base::out | ios_base::truncios_base::out | ios_base::trunc“w”打开以写入如果文件存在先清空文件ios_base::out | ios_base::app“a”打开以写入只追加ios_base::in | ios_base::out“r”打开以读写在文件允许的位置写入ios_base::in | ios_base::out | ios_base::trunc“w”打开以读写如果文件按存在清空文件