用文件存储数据,打印出来都是都是乱码怎么解决

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 20

struct gong
{
int num; //工号
char name[20];//姓名
int year; //工龄
int base; //基本工资
int butie; //补贴
int jiang; //奖金
int shui; //水电费
int real; //实发工资
int rank; //工龄排名
};

typedef struct {
struct gong data[MAXSIZE];
int length;
}sqlist;

sqlist initlist(sqlist l)
{ int i;
for(i=0;i<10;i++);
l.data[i].num=0;l.data[i].base=0;l.data[i].butie=0;l.data[i].jiang=0;l.data[i].rank=0;l.data[i].real=0;l.data[i].shui=0;l.data[i].year=0;l.data[i].name[0]='w';l.data[i].name[1]='\0';
l.length=0;
return l;
}

sqlist save()
{
int i;
FILE*fp;
sqlist l;
l.length=MAXSIZE;
fp=fopen("C:\gong.txt","r");
for(i=0;i<=9;i++)
fscanf(fp,"%d%s%d%d%d%d%d%d%d",&l.data[i].num,l.data[i].name,&l.data[i].year,&l.data[i].base,&l.data[i].butie,&l.data[i].jiang,&l.data[i].shui,&l.data[i].real,&l.data[i].rank);
fclose(fp);
return l;
}
void find(int a,sqlist l)
{
int i;
for(i=0;i<=9;i++)
{
printf("%d,%s,%d,%d,%d,%d,%d,%d,%d\n",l.data[i].num,l.data[i].name,l.data[i].year,l.data[i].base,l.data[i].butie,l.data[i].jiang,l.data[i].shui,l.data[i].real,l.data[i].rank);
printf("not find");
}
}

void main()
{
int a,x;
sqlist l;
initlist(l);
save();
scanf("%d",&a);
find(a,l);
}

img

fp=fopen("C:\\gong.txt","r");
你用一个'\'真的读出文件数据了?

你连文件是否读取成功都没有判断,导致后面的for循环其实是对着空气做了一堆处理,数据都是垃圾数据,所以显示成现在这个样子。
你应该 if(fp != NULL)后再做后面的文件读取解析处理