c语言 从文件读取数组并存入结构体数组中

有一个数据文件,里边放着五个字段:学号,姓名,语文,数学,英语五个字段,有个一个结构体数组 a[100]其类型分别为char index[11] ,char name[10],int Chinese,int Math,int English 我需要将文件中的所有数据读入结构体数组当中,但是一遇到数字,运行是时候他就会卡出来,直接程序结束了。求解,本人无法解决了,求大神解惑。

 

代码如下(只是一小部分):

void CJPX()
{
    int i=0,c,o,u,a1;
    char t1[11];
    FILE *p,*p1;
    p=fopen("ChengJi","r");
    fscanf(p,"%s %s %s %s %s",b[0].index,b[0].name,b[0].Chinese,b[0].Math,b[0].English);
    while (1)
    {
        fscanf(p,"%s %s %d %d %d",a[i].index,a[i].name,&a[i].Chinese,&a[i].Math,&a[i].English);
        i=i+1;
        if (fgetc(p)==EOF)
            break;
    }
    fclose(p);

    printf("%s",a[0].Chinese);
    for (o=1;o<i-2;o++)
    {
        for (u=o+1;u<i-1;u++)
        {
            if (a[o].Chinese<=a[u].Chinese)
            {
                strcpy(t1,a[u].index);
                strcpy(a[u].index,a[o].index);
                strcpy(a[o].index,t1);

                strcpy(t1,a[u].name);
                strcpy(a[u].name,a[o].name);
                strcpy(a[o].name,t1);

                a1=a[u].Chinese;
                a[u].Chinese=a[o].Chinese;
                a[o].Chinese=a1;

                a1=a[u].Math;
                a[u].Math=a[o].Math;
                a[o].Math=a1;

                a1=a[u].English;
                a[u].English=a[o].English;
                a[o].English=a1;
            }
        }
    }
    p1=fopen("ChengJi1","w");
    fprintf(p1,"   学号\t\t姓名\t语文\t数学\t英语\n");
    for (c=1;c<i;c++)
        fprintf(p1,"%s\t%s\t%s\t%s\t%s\n",b[c].index,b[c].name,b[c].Chinese,b[c].Math,b[c].English);
}
 

fscanf(p,"%s %s %s %s %s",b[0].index,b[0].name,b[0].Chinese,b[0].Math,b[0].English);

改为

fscanf(p,"%d %s %d %d %d",b[0].index,b[0].name,b[0].Chinese,b[0].Math,b[0].English);

读取数据改成:

while (!feof(p))
{
        fscanf(p,"%s %s %d %d %d\n", a[i].index,a[i].name,&a[i].Chinese,&a[i].Math,&a[i].English);
        i=i+1;
}

//fscanf中的\n试一下去掉有没有影响。