m0_57288315 2022-01-24 09:10 采纳率: 100%
浏览 69
已结题

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);

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

汉字正常读取

  • 写回答

2条回答 默认 最新

  • 关注

    把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;
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月1日
  • 已采纳回答 1月24日
  • 创建了问题 1月24日

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题