qq_42383219 2021-06-18 16:56 采纳率: 66.7%
浏览 17

C语言大题求帮助!!

2.在当前目录下的磁盘文件“stu.dat”上存有10个学生的数据,已知student结构体定义如下:

struct student {     // 建立结构体类型struct student

    int num;        // 学号

    char name[20];   // 姓名

    float score[3];    // 3门课成绩

    float aver;       // 平均成绩

};

编写程序实现:将第2,4,6,8,10个学生数据读入计算机中,并在屏幕上显示出来。

  • 写回答

1条回答 默认 最新

  • a5156520 2023-01-19 14:32
    关注

    可以使用fscanf()函数从文件读取的学习信息存入学生信息结构数组即可,代码如下:

    参考链接:


    
    #include <stdio.h> 
    
    struct student {     // 建立结构体类型struct student
    
        int num;        // 学号
    
        char name[20];   // 姓名
    
        float score[3];    // 3门课成绩
    
        float aver;       // 平均成绩
    
    };
    
    int main(void){
        
        struct student ss[5],temp;
        int i=0;
        
        FILE * fp = fopen("stu.dat","r");
        if(fp==NULL){
            printf("读取文件stu.data失败,程序退出!\n");
            return 0;
        }
        
        char ch;
        while(i<5){ //  读取第2,4,6,8,10个学生的信息存入学生结构数组相应的元素中 
            
            // 读走单数位置的学生信息 
            fscanf(fp,"%d%s%f%f%f%f\n",&temp.num,temp.name,
            &temp.score[0],&temp.score[1],&temp.score[2],&temp.aver);
            
            //  把偶数位置的学生信息存入结构数组相应位置 
            if(i==4){  // 如果是最后一个学生信息,末尾不读取换行符了 
                fscanf(fp,"%d %s %f %f %f %f",&ss[i].num,ss[i].name,
                &ss[i].score[0],&ss[i].score[1],&ss[i].score[2],&ss[i].aver);
            }else{ // 如果不是最后一个学生信息,把每行结尾的换行符读走 
                fscanf(fp,"%d %s %f %f %f %f\n",&ss[i].num,ss[i].name,
                &ss[i].score[0],&ss[i].score[1],&ss[i].score[2],&ss[i].aver);
            }
    
            
            i+=1;
        }
        fclose(fp);
        
        // 打印结果 
        for(i=0;i<5;i++){
            printf("第%d个学生的信息为:\n学号:%d,姓名:%s,第一门成绩:%.0f,第二门成绩:%.0f,第三门成绩:%.0f,平均成绩:%.0f\n",
            (i+1)*2,ss[i].num,ss[i].name,ss[i].score[0],ss[i].score[1],ss[i].score[2],ss[i].aver);
        }
        
        return 0;
    }
    

    stu.dat(测试文件内容,以ANSI编码方式保存):

    1001 张三 60 70 80 70
    1002 李四 61 71 81 71
    1003 王五 62 72 82 72
    1004 赵六 63 73 83 73
    1005 丁七 64 74 84 74
    1006 张花 65 75 85 75
    1007 章八 66 76 86 76
    1008 田九 67 77 87 77
    1009 文十 68 78 88 78
    1010 程学 69 79 89 79
    

    img

    评论 编辑记录

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能