C++ 课程作业 流类库与输入输出 二进制文件的读写

首先是题目
【问题描述】
请编写一个程序,实现如下功能

1、定义结构体student, 包括stu_id,score 2个变量。其中stu_id是一个short型变量,score为short型变量。

2、从键盘输入学生个数n及n个学生的数据,存储在new创建的数组a中

3、使用write函数,以二进制形式,将a数组中存放的n个学生一次写入out.txt文件中(不要使用循环)

4、使用read函数,以二进制形式,使用循环方式,从out.txt中每次读出一个学生信息,存储于new创建的数组b中

5、使用write函数,以文本形式,将b数组中存放的n个学生一次写入out.txt文件中,要求添加到文件末尾(不要使用循环)

【输入形式】
输入第一行是整数,表示有n个学生
输入第2到n+1行是学生信息,每行表示一个学生的stu_id,score
【输出形式】
输出文件名:out.txt,其中包括2次输出信息

然后是代码

#include 
#include
using namespace std;
struct student//定义结构体,用于储存学生的信息
{
    short stu_id, score;
};
int main()
{
    int n;
    ofstream out1("out.txt", ios::binary);
    //ios::binary表示用二进制方式打开(仅写入)
    cin >> n;//先从键盘接受学生数
    student* a = new student[n];//根据学生数申请空间,创建结构体数组
    student* b = new student[n];//同上
    for (int i = 0; i < n; i++)//循环读入数据
    {
        cin >> a[i].stu_id;
        cin >> a[i].score;
    }
    if (out1)//这个表示判断文件是否打开成功
    {
        out1.write((char*)a, sizeof(a));
        //使用write函数,写入内存设置为a的全部内存空间就能一次写入了,注意write函数形参的类型是char指针,所以需要类型转换一下
    }
    out1.close();//关闭文件
    ifstream out2("out.txt", ios::binary);//用二进制方式打开(仅读取)
    if (out2)
    {
        for (int i = 0; i < n; i++)
            out2.read((char*)(b+i), sizeof(student));
            //这里是循环读出信息,所以一次读取的空间是一个结构体的空间,b+i表示地址
    }
    out2.close();//关闭文件
    ofstream out3("out.txt", ios::app);//ios::app表示追加打开,文件指针在文件末尾
    if (out3)
    {
        out3.write((char*)b, sizeof(a));//一次写入所有数据
    }
    out3.close();//关闭文件
    delete[] a;//删除之前申请的空间,减少内存占用
    delete[] b;
    return 0;
}

小结:ifstream和ofstream都在fstream中,read和write函数使用时第一个形参要转换成char*类型,第二个形参设置空间大小,根据需要可做一次或者循环操作。

你可能感兴趣的:(C++ 课程作业 流类库与输入输出 二进制文件的读写)