• 第二十一章流 13seekp()和seekg()函数的结合使用 简单


    //第二十一章流 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;
    }*/
    

      

  • 相关阅读:
    登录界面
    动手动脑
    关于二进制
    Java考试
    D
    威尔逊定理 k!%p
    11.46.2020质检
    最长上升序列输出方案
    问题 G: 汽车的最终位置
    奶牛大会(二分)
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2709704.html
Copyright © 2020-2023  润新知