m0_63667520 2021-12-17 10:50 采纳率: 100%
浏览 42
已结题

结构体变量的初始化,运用

1)定义一个结构体类型stud (int id, char name[20], char banj[30], char sex, float scorel,float score2, float total)
2)定义 个结构体数组s[5],并初始化前2个人的数据,从键盘输入3个人的数据。
3)将这5个人的数据写入到文件a.txt中
4)从a.txt中读出数据,存放在s[5]中,用循环实现5个人数据的计算并屏幕输出。

  • 写回答

2条回答 默认 最新

  • 关注

    for循环录入剩余3个学生数据后,用fopen打开文件,用fprintf逐个写入文件就是了。
    读取文件用fscanf函数读取就可以了
    参考如下:

    #include <stdio.h>
    
    struct stud 
    {
        int id;
        char name[20];
        char banj[30];
        char sex;
        float scorel;
        float score2;
        float total;
    };
    
    int main()
    {
        struct stud s[5]={ {111,"张三","一班",'M',70,80,150},{112,"李四","二班",'M',70,80,150} }; 
        int i;
        FILE* fp;
        printf("请输入3个学生的信息:\n");
        for(i=0;i<3;i++)
        {
            printf("请输入学号:");
            scanf("%d",&s[i+2].id); getchar(); //接收回车符
            printf("请输入姓名:");
            scanf("%s",s[i+2].name); getchar(); //接收回车符
            printf("请输入班级:");
            scanf("%s",s[i+2].banj); getchar(); //接收回车符
            printf("请输入性别(F/M):"); 
            s[i+2].sex = getchar();
            printf("请输入成绩1:");
            scanf("%f",&s[i+2].scorel);
            printf("请输入成绩2:");
            scanf("%f",&s[i+2].score2);
            s[i+2].total = s[i+2].scorel + s[i+2].score2;
        }
        if ((fp=fopen("a.txt","w")) == 0)
        {
            printf("文件打开失败\n");
            return 0;
        }
        //写入文件
        for (i=0;i<5;i++)
        {
            fprintf(fp,"%d %s %s %c %f %f %f\n",s[i].id,s[i].name,s[i].banj,s[i].sex,s[i].scorel,s[i].score2,s[i].total);
        }
        fclose(fp);
        //读取文件并显示
        if((fp=fopen("a.txt","r"))==0)
        {
            printf("文件打开失败\n");
            return 0;
        }
        i = 0;
        while (!feof(fp))
        {
            fscanf(fp,"%d %s %s %c %f %f %f\n",&s[i].id,s[i].name,s[i].banj,&s[i].sex,&s[i].scorel,&s[i].score2,&s[i].total);
            if(s[i].id > 0)//避免读入空行
            {
                
                printf("%d %s %s %c %f %f %f\n",s[i].id,s[i].name,s[i].banj,s[i].sex,s[i].scorel,s[i].score2,s[i].total);
                i++;
            }
            
        }
        fclose(fp);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月29日
  • 已采纳回答 12月21日
  • 创建了问题 12月17日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效