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

代码

img

huiyuan

img

调试结果

img

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


long num[20]改为long num;score和tele也一样。整型变量不需要定义成数组啊。手机号码11位,建议用long long类型
每行数据之间的分隔符应该是空格,不是TAB键,把fscanf中\t改为空格,或者直接%s%s即可