fscnaf读取汉字错误

问题遇到的现象和发生背景

用fscanf %s读取汉字再输出,汉字变了
001 李大 003 000 1101000000000000000000000 12
李大变成了鏉庡ぇ
之前运行可以正常运行,但是后面就不可以了

问题相关代码,请勿粘贴截图
typedef struct student
{
    int id;//学号
    char name[100];//姓名
    int must_num;//已选必修课程数量
    int select_num;//已选选修课程数量
    int class_form[25];//按照课程id排序,0表示未选,1表示已选
    int score;//当前总学分
    struct student* next;
}STUD;//定义学生结构体
fp2 = fopen("student.txt", "r+");
fscanf(fp2, "%3d%c", &Student->id);
fscanf(fp2, "%s", Student->name);
fscanf(fp2, "%*c%3d", &Student->must_num);
fscanf(fp2, "%*c%3d%*c", &Student->select_num);
for (int i = 0; i < 25; i++)
{
    fscanf(fp2, "%1d", &Student->class_form[i]);
}
fscanf(fp2, "%*c%3d\n",&Student->score);

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

汉字正常读取

把fscanf中的%c都删掉,不需要
%3d改成%d
用空格做分割符的时候,在读文件的时候,不需要用单独的字符取读取。
如下:

#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
    int id;//学号
    char name[100];//姓名 
    int must_num;//已选必修课程数量
    int select_num;//已选选修课程数量
    int class_form[25];//按照课程id排序,0表示未选,1表示已选
    int score;//当前总学分
    struct student* next;
}STUD;//定义学生结构体

int main()
{
    STUD *Student = (STUD*)malloc(sizeof(STUD));
    FILE* fp2 = fopen("student.txt", "r+");
    char tmp[26]={0};
    fscanf(fp2, "%d", &Student->id);
    fscanf(fp2, "%s", Student->name);
    fscanf(fp2, "%d", &Student->must_num);
    fscanf(fp2, "%d", &Student->select_num);
    fscanf(fp2, "%s",tmp);
    for (int i = 0; i < 25; i++)
    {
        Student->class_form[i] = tmp[i]-'0'; //直接用fscanf读取是不对的
    }
    fscanf(fp2, "%d\n",&Student->score);

    fclose(fp2);
    return 0;
}



您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632