//第二十一章流 13seekp()和seekg()函数的结合使用
/*#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
const int num = 10;
struct people
{
char name[num];
int age;
float pay;
};
const char*file = "people13.txt";
void deleteline(){ while(cin.get() !='\n') continue; }
int main()
{
//people pp={"陈涛",25,945.34f};
//ofstream fout(file,ios::out|ios::binary);
//fout.write((char*)&pp, sizeof pp);
//fout.close();
//people pp1={"李力持",45,1065.58f};
//fout.open(file,ios::in|ios::out|ios::binary);
//fout.seekp(sizeof pp, ios::beg);
//fout.write((char*)&pp1,sizeof pp1);
//fout.close();
people pp={0};
ofstream fout(file,ios::out|ios::binary);
bool quit = true;
while(quit)
{
cout<<"输入名称:";
cin.get(pp.name,num);
cin.ignore();
cout<<"输入年龄";
cin>>pp.age;
cout<<"输入薪水";
cin>>pp.pay;
fout.write((char*)&pp, sizeof pp);
cout<<"是否继承输入,是按y,否按n:"<<endl;
char choice;
cin>>choice;
if(choice=='y'){
deleteline();
continue;
}else
quit = false;
}
fout.close();
cout<<fixed;
fstream InOut;
InOut.open(file,ios::in|ios::out|ios::binary);
int count=0;
if(InOut.is_open())
{
InOut.seekp(0);//设置函数将指针定位到文件头
cout<<"当前内容为:"<<file<<endl;
while(InOut.read((char*)&pp, sizeof pp))
{
cout<<count++<<":"<<setw(num)<<pp.name<<":"<<setprecision(0)<<setw(12)<<pp.age<<setprecision(2)<<setw(16)<<pp.pay<<endl;
}
if(InOut.eof())//当函数遇到EOF后
{
InOut.clear();
}else{
cout<<"读取错误"<<file<<endl;
exit(EXIT_FAILURE);
}
}else{
cout<<file<<"不能找开\n";
exit(EXIT_FAILURE);
}
cout<<"输入你希望改变的编号:"<<endl;
long line;
cin>>line;
deleteline();
if(line<0 || line>=count)
{
cout<<"无效编号"<<endl;
exit(EXIT_FAILURE);
}
streampos place = line*sizeof pp;
InOut.seekg(place);
if(InOut.fail()){
cout<<"尝试查询失败"<<endl;
exit(EXIT_FAILURE);
}
InOut.read((char*)&pp, sizeof pp);
cout<<"你的选择为:";
cout<<line<<":"<<setw(num)<<pp.name<<":"<<setprecision(0)<<setw(12)<<pp.age<<setprecision(2)<<setw(16)<<pp.pay<<endl;
if(InOut.eof())
{
InOut.clear();
}
cout<<"输入名字:"<<endl;
cin.get(pp.name,num);
deleteline();
cout<<"输入年龄:"<<endl;
cin>>pp.age;
cout<<"输入薪水"<<endl;
cin>>pp.pay;
InOut.seekp(place);
InOut.write((char*)&pp,sizeof pp)<<flush;
if(InOut.fail()){
cout<<"尝试写入失败"<<endl;
exit(EXIT_FAILURE);
}
count=0;
InOut.seekg(0);
cout<<"当前内容为:"<<file<<endl;
while(InOut.read((char*)&pp, sizeof pp))
{
cout<<count++<<":"<<setw(num)<<pp.name<<":"<<setprecision(0)<<setw(12)<<pp.age<<setprecision(2)<<setw(16)<<pp.pay<<endl;
}
InOut.close();
cout<<"完成!";
return 0;
}*/