C++语言基础 例程 文件的随机读写-阿里云开发者社区

开发者社区> 贺利坚> 正文

C++语言基础 例程 文件的随机读写

简介: 贺老师的教学链接  本课讲解 示例:写到尾再从头读 #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int main( ) { int a[10], b[10]; fstream iofile("f1.dat",ios::in|io
+关注继续查看

贺老师的教学链接  本课讲解


示例:写到尾再从头读

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main( )
{
    int a[10], b[10];
    fstream iofile("f1.dat",ios::in|ios::out);
    if(!iofile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    cout<<"enter 10 integer numbers:"<<endl;
    for(int i=0; i<10; i++)
    {
        cin>>a[i];
        iofile<<a[i]<<" ";
    }
    cout<<"The numbers have been writen to file. "<<endl;
    cout<<"Display the data by read from file: "<<endl;
    iofile.seekg(0, ios::beg);  //文件指针重回文件开始位置
    for(int i=0; i<10; i++)
    {
        iofile>>b[i];
        cout<<b[i]<<" ";
    }
    cout<<endl;
    iofile.close();
    return 0;
}


学生数据处理
#include<iostream>
#include <fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
struct student
{
    int num;
    char name[20];
    float score;
};
int main( )
{
    student stud[5]= {{1001,"Li",85},{1002,"Fun",97.5},{1004,"Wang",54},
        {1006,"Tan",76.5},{1010,"ling",96}
    };
    fstream iofile("stud.dat",ios::in|ios::out|ios::binary);
    //用fstream类定义输入输出二进制文件流对象iofile
    if(!iofile)
    {
        cerr<<"open error!"<<endl;
        abort( );
    }
    //(1)向磁盘文件输出5个学生的数据并显示出来
    cout<<"(1)向磁盘文件输出5个学生的数据并显示出来"<<endl;
    for(int i=0; i<5; i++)
    {
        iofile.write((char *)&stud[i],sizeof(stud[i]));
        cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
    }


    //(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;
    cout<<"(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来"<<endl;
    student stud1[5];                  //用来存放从磁盘文件读入的数据
    for(int i=0; i<5; i=i+2)
    {
        iofile.seekg(i*sizeof(stud[i]),ios::beg);  //定位于第0,2,4学生数据开头
        iofile.read((char *)&stud1[i/2],sizeof(stud1[0]));
        //先后读入3个学生的数据,存放在stud1[0],stud[1]和stud[2]中
        cout<<stud1[i/2].num<<" "<<stud1[i/2].name<<" "<<stud1[i/2].score<<endl;
        //输出stud1[0],stud[1]和stud[2]各成员的值
    }
    cout<<endl;


    //(3) 将第3个学生的数据修改后存回磁盘文件中的原有位置。
    cout<<"(3)将第3个学生的数据修改后存回磁盘文件中的原有位置"<<endl;
    stud[2].num=1012;                         //修改第3个学生(序号为2)的数据
    strcpy(stud[2].name,"Wu");
    stud[2].score=60;
    iofile.seekp(2*sizeof(stud[0]),ios::beg);   //定位于第3个学生数据的开头
    iofile.write((char *)&stud[2],sizeof(stud[2])); //更新第3个学生数据
    iofile.seekg(0,ios::beg);                       //重新定位于文件开头


    //(4)从磁盘文件读入修改后的5个学生的数据并显示出来。
    cout<<"(4)从磁盘文件读入修改后的5个学生的数据并显示出来"<<endl;
    for(int i=0; i<5; i++)
    {
        iofile.read((char *)&stud[i],sizeof(stud[i]));  //读入5个学生的数据
        cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
    }
    iofile.close( );
    return 0;
}


学生数据处理(OO版)
#include<iostream>
#include <fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
class Student
{
public:
    Student(void) {}
    Student(int n, char nam[20], float s):num(n),score(s)
    {
        strcpy(name,nam);
    }
    void setNum(int n)
    {
        num=n;
    }
    void setName(char nam[20])
    {
        strcpy(name,nam);
    }
    void setScore(float s)
    {
        score=s;
    }
    void show()
    {
        cout<<num<<" "<<name<<" "<<score<<endl;    //显示通过<<的重载实现更自然
    }
private:
    int num;
    char name[20];
    float score;
};


int main( )
{
    Student stud[5]=
    {
        Student(1001,"Li",85),
        Student(1002,"Fun",97.5),
        Student(1004,"Wang",54),
        Student(1006,"Tan",76.5),
        Student(1010,"ling",96)
    };
    fstream iofile("stud.dat",ios::in|ios::out|ios::binary);


    //用fstream类定义输入输出二进制文件流对象iofile
    if(!iofile)
    {
        cerr<<"open error!"<<endl;
        abort( );
    }
    //(1)向磁盘文件输出5个学生的数据并显示出来
    cout<<"(1)向磁盘文件输出5个学生的数据并显示出来"<<endl;
    for(int i=0; i<5; i++)
    {
        iofile.write((char *)&stud[i],sizeof(stud[i]));
        stud[i].show();
    }


    //(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;
    cout<<"(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来"<<endl;
    Student stud1[5];                  //用来存放从磁盘文件读入的数据
    for(int i=0; i<5; i=i+2)
    {
        iofile.seekg(i*sizeof(stud[i]),ios::beg);  //定位于第0,2,4学生数据开头
        iofile.read((char *)&stud1[i/2],sizeof(stud1[0]));  //先后读入3个学生的数据,存放在stud1[0],stud[1]和stud[2]中
        stud1[i/2].show();		//输出stud1[0],stud[1]和stud[2]各成员的值
    }
    cout<<endl;


    //(3) 将第3个学生的数据修改后存回磁盘文件中的原有位置。
    cout<<"(3)将第3个学生的数据修改后存回磁盘文件中的原有位置"<<endl;
    stud[2].setNum(1012);                         //修改第3个学生(序号为2)的数据
    stud[2].setName("Wu");
    stud[2].setScore(60);
    iofile.seekp(2*sizeof(stud[0]),ios::beg);   //定位于第3个学生数据的开头
    iofile.write((char *)&stud[2],sizeof(stud[2])); //更新第3个学生数据
    iofile.seekg(0,ios::beg);                       //重新定位于文件开头


    //(4)从磁盘文件读入修改后的5个学生的数据并显示出来。
    cout<<"(4)从磁盘文件读入修改后的5个学生的数据并显示出来"<<endl;
    for(int i=0; i<5; i++)
    {
        iofile.read((char *)&stud[i],sizeof(stud[i]));  //读入5个学生的数据
       stud[i].show();
    }
    iofile.close( );
    return 0;
}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
8466 0
C语言项目中头文件/代码文件的组织问题(使用VC6.0)
个人备忘:   1.新建一个文本文件命名为main.c,使用VC6.0打开并编译,VC6.0会在当前文件夹下自动创建“工作区间”和“工程”文件,如:main.dsw,main.dsp等;然后就可以在“工程”下新建或添加你的.c和.h文件。
898 0
+关注
贺利坚
烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
1965
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载