不厭徐何 2023-04-01 18:50 采纳率: 56.5%
浏览 20
已结题

磁盘文件读取输出-c语言

从键盘输入10个学生的数据,并把它们转存到磁盘上,再从磁盘中读出并输出在屏幕上。
不知道哪里错了


#include <stdio.h>
#define SIZE 10
struct Student{
    char name[10];
    int num;
    int age;
    char addr[15];
}stu[SIZE];
struct Student  stud[SIZE];

int main(){
    printf("please enter date of students:\n");
    int i;
    for(i=0;i<SIZE;i++)
    scanf("%s%d%d%s",stu[i].name,&stu[i].num,&stu[i].age,stu[i].addr);
    //保存到磁盘
    FILE *fp;
    if((fp=fopen("stu.dat","wb"))==NULL){
        printf("cannot open file\n");
        exit(0);
    }
    for(i=0;i<SIZE;i++){
        if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
        printf("file write error\n");
    }
    fclose(fp);
    //从磁盘文件中读出
    FILE *fp1;
    if((fp1=fopen("stu.dat","rb"))==NULL){
        printf("cannot open file\n");
        exit(0);
    } 
    for(i=0;i<SIZE;i++)
        fread(&stud[i],sizeof(struct Student),1,fp1);
        printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
        fclose(fp1);
    return 0;    
} 
  • 写回答

3条回答 默认 最新

  • a5156520 2023-04-01 19:09
    关注

    把第35行,36行用大括号一起括起来,放到第34行的for循环里即可。

    修改如下:

    
    #include <stdio.h>
    #include <stdlib.h> 
    #define SIZE 3
    struct Student{
        char name[10];
        int num;
        int age;
        char addr[15];
    }stu[SIZE];
    struct Student  stud[SIZE];
     
    int main(){
        printf("please enter date of students:\n");
        int i;
        for(i=0;i<SIZE;i++)
        scanf("%s%d%d%s",stu[i].name,&stu[i].num,&stu[i].age,stu[i].addr);
        //保存到磁盘
        FILE *fp;
        if((fp=fopen("stu.dat","wb"))==NULL){
            printf("cannot open file\n");
            exit(0);
        }
        for(i=0;i<SIZE;i++){
            // https://baike.baidu.com/item/fwrite/10942398?fr=aladdin
            if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
            printf("file write error\n");
        }
        fclose(fp);
        //从磁盘文件中读出
        FILE *fp1;
        if((fp1=fopen("stu.dat","rb"))==NULL){
            printf("cannot open file\n");
            exit(0);
        } 
        for(i=0;i<SIZE;i++){
            fread(&stud[i],sizeof(struct Student),1,fp1);
            printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
        }
            
            fclose(fp1);
        return 0;    
    } 
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月1日
  • 创建了问题 4月1日

悬赏问题

  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥15 python安卓开发
  • ¥15 使用R语言GD包一直不出结果
  • ¥15 计算机微处理器与接口技术相关问题,求解答图片的这个问题,有多少个端口,端口地址和解答问题的方法和思路,不要AI作答
  • ¥15 如何根据一个截图编写对应的HTML代码
  • ¥15 stm32标准库的PID角度环