不厭徐何 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日

悬赏问题

  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败