m0_64967516 2021-12-15 16:43 采纳率: 100%
浏览 101
已结题

C语言读取文件为什么显示乱码

代码

img

huiyuan

img

调试结果

img

  • 写回答

2条回答 默认 最新

  • 关注

    num是数组,%ld只能读取1个long类型,scanf中直接用数组接收数据肯定出错啊
    把结构体中的
    long num[20]改成 long num;
    int score[20]改成 int score;
    int tele[20]改成 long tele;
    scanf中的\t改成空格,最后一个%d改成 %ld(对应tele这个变量的)

    或者,直接用char数组来接收num和tele数据就可以了,下面的代码是用char数组来读取数据的。

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct member
    {
        char num[20];
        char name[20];
        char sex[20];
        int score;
        char tele[20];
    };
    struct member mem[20];
    int main()
    {
        int i,j;
        FILE* fp;
        if ((fp=fopen("huiyuan.txt","r"))==NULL)
        {
            printf("wrong");
            exit(0);
        }
        i=0;
        while (!feof(fp)) //文件中并不一定够20组数据,所以最好不要用for循环取读取
        {
            fscanf(fp,"%s %s %s %d %s\n",mem[i].num,mem[i].name,mem[i].sex,&mem[i].score,mem[i].tele);
            fprintf(stdout,"%s %s %s %d %s\n",mem[i].num,mem[i].name,mem[i].sex,mem[i].score,mem[i].tele);
            
            i++; //i是读取的数据条数
        }
        fclose(fp);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月23日
  • 已采纳回答 12月15日
  • 创建了问题 12月15日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看