编写代码,实现如下功能: 建立班级通讯录,通讯录中记录每个学生的学号、姓名、电话。 每个人的信息作为数据块写到名为myfile.dat的二进制文件中,然后将文字的内容显示在屏幕上。

编写代码,实现如下功能:
建立班级通讯录,通讯录中记录每个学生的学号、姓名、电话。
每个人的信息作为数据块写到名为myfile.dat的二进制文件中,然后将文字的内容显示在屏幕上。

可以先定义一个存储学生信息的结构,然后在一个循环中获取班级n个学生的信息存入文件,然后再次打开文件读取学生信息显示在屏幕即可,代码如下:


#include <stdio.h>
#include <stdlib.h>


struct mailList{
    int sid;  // 学号 
    char name[20];  // 姓名 
    char phone[20]; // 电话号码 
}; 

int main(void){
    
    int n;
    printf("请输入班级学生的人数:");
    scanf("%d",&n); 
    struct mailList * ms = (struct mailList *)malloc(sizeof(struct mailList )*n); // 申请存储输入的学生信息的内存空间 
    
    // https://blog.csdn.net/jobfind/article/details/89191265
    FILE * fp = fopen("myfile.dat","wb");
    if(fp==NULL){
        printf("文件打开或创建失败!\n");
        return 0;
    }
    
    int i;
    // 从输入获取n个学生的信息 
    for(i=0;i<n;i++){
        printf("请输入第%d个学生的信息(学号 姓名  电话):",i+1);
        scanf("%d %s %s",&ms[i].sid,ms[i].name,ms[i].phone);
        // https://www.runoob.com/cprogramming/c-function-fwrite.html
        fwrite(&ms[i],sizeof(struct mailList),1,fp);
    }
    fclose(fp);
    
    fp = fopen("myfile.dat","rb");
    if(fp==NULL){
        printf("文件打开或创建失败!\n");
        return 0;
    }
    
    struct mailList * rs = (struct mailList *)malloc(sizeof(struct mailList )*n); // 申请存储从文件读取学生信息的内存空间 
    // 从文件myfile.data读取n个学生的信息 
    for(i=0;i<n;i++){
        // https://www.runoob.com/cprogramming/c-function-fread.html
        fread(&rs[i],sizeof(struct mailList),1,fp);
        printf("第%d个学生的信息(学号 姓名  电话):%d %s %s\n",i+1,ms[i].sid,ms[i].name,ms[i].phone);    
    }
    fclose(fp);
    
    return 0;
}

img