sppbszc 2023-12-18 01:02 采纳率: 90%
浏览 5
已结题

结构体输入到文档中发生错误怎么办(语言-c++)

int main()

struct student
{
    int num;
    char name[50];
    float maths;
    float english;
    float cxsj;
    float chxgl;
    float dqxtkx;
    float average;
};

printf("提示:学生总数不得超过1000。\n");
int N;
printf("学生总数为:");
scanf_s("%d", &N);
printf("\n\n");

struct student stu[1000]{};

printf("读入学生成绩:\n\n");

const char* path1 = "C:\\Users\\qjy\\Desktop\\上课\\程序设计\\作业\\作业实体\\大作业\\学生成绩文档.txt";
FILE* p1 = NULL;
int a1 = fopen_s(&p1, path1, "wb+");

student blank1 = { 0," ",0,0,0,0,0,0 };
fwrite(&blank1, sizeof(stu), N, p1);

fclose(p1);

printf("\n以下是已读入的学生成绩:\n\n");

FILE* p11 = NULL;
int a11 = fopen_s(&p11, path1, "rb");

while (feof(p11) == 0)
{
    student stu1;
    fread(&stu1, sizeof(struct student), 1, p11);
    printf("%d %s %f %f %f %f %f %f\n", stu1.num, stu1.name, stu1.maths, stu1.english, stu1.dqxtkx, stu1.cxsj, stu1.chxgl, stu1.average);
}

fclose(p11);

return 1;

}

为什么读出来不是四个{0, ,0等等}而是乱码呢?应该怎样修改?

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-12-18 10:01
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    struct student
    {
        int   num;
        char  name[50];
        float maths;
        float english;
        float cxsj;
        float chxgl;
        float dqxtkx;
        float average;
    };
    int main()
    {
        printf("提示:学生总数不得超过1000。\n");
        int N;
        printf("学生总数为:");
        scanf_s("%d", &N);
        printf("\n\n");
    
        struct student stu[1000]{};
    
        printf("读入学生成绩:\n\n");
    
        const char* path1 = "C:\\Users\\qjy\\Desktop\\上课\\程序设计\\作业\\作业实体\\大作业\\学生成绩文档.txt";
        FILE* p1 = NULL;
        int a1 = fopen_s(&p1, path1, "wb+");
    
        struct student blank1 = { 0,"\0",0,0,0,0,0,0 };
        if (a1)  return 1;   // 修改 判断文件读取是否成功,不成功即跳出运行
        fwrite(&blank1, sizeof(struct student), N, p1); // 修改
        //fwrite(&blank1, sizeof(stu), N, p1);
        fclose(p1);
    
        printf("\n以下是已读入的学生成绩:\n\n");
    
        FILE* p11 = NULL;
        int a11 = fopen_s(&p11, path1, "rb");
        if (a11) return 1;//修改
        while (feof(p11) == 0)
        {
            student stu1;
            fread(&stu1, sizeof(struct student), 1, p11);
            printf("%d %s %f %f %f %f %f %f\n", stu1.num, stu1.name, stu1.maths, stu1.english, stu1.dqxtkx, stu1.cxsj, stu1.chxgl, stu1.average);
        }
        fclose(p11);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 创建了问题 12月18日

悬赏问题

  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题
  • ¥20 基于matlab的航迹融合 航迹关联 航迹插补
  • ¥15 用Matlab实现图中的光线追迹
  • ¥15 联想笔记本开机出现系统更新界面
  • ¥15 各位帮帮我 我不想重做系统
  • ¥30 微信小程序蓝牙数据透传
  • ¥15 加氢站氢负荷数据集来源
  • ¥15 umi接入sentry遇到问题