改了又改还是不对,不懂不懂,坐等大佬

刚输出,就出现乱码,怎么会这样啊???

第25行 struct FP** pHead = NULL;多写了一个*号 改成:struct FP* pHead = NULL;-------不好意回复错了

主函数main()里第31行开始到第38行止,这段的文件读入和第39行调用file()函数打印文件重复了,file()函数里不再需要打开文件的操作,只要保留打印数组的相关语句就可以了。另第34行的文件读入fscanf()里面的 & 是多余的,读入的是字符串,前面不需要加 '&‘符号。第29行定义的 stu s;是多余的。

结构体定义的代码看的不是很清楚,这里修改完善了下,两个函数里的形参  struct student  这里对应你结构体名的定义,不对的话自己修改下:

void file_printf(int n,struct student *s)
{
    int i;
    printf("   学生系统   \n");
    for(i=0;i<n;i++)
    {
        printf("%s %s %s %d %s",s[i].no,s[i].name,s[i].sex,s[i].age,s[i].other);
    }
}

void file_save(int n,struct student *s)
{
    FILE *fp;
    int  i;
    fp = fopen("c:\\a6.txt","w");
    if(fp == NULL){
        printf("file open fail!\n");
        return;
    }
    for(i=0;i<n;i++)
        fprintf(fp,"%s %s %s %d %s",s[i].no,s[i].name,s[i].sex,s[i].age,s[i].other);
    fclose(fp);
    printf("文件保存成功!\n");
}



int main()
{
    int j=0;
    FILE *fp;
    fp = fopen("c:\\a6.txt","r");
    if(fp == NULL){
         printf("file open fail!\n");
         return 1;
    }
    while(fscanf(fp,"%s %s %s %d %s",stu[j].no,stu[j].name,stu[j].sex,&stu[j].age,stu[j].other)==5)j++;
    fclose(fp);
    n = j;          //这里的 n 是全局变量?
    file_printf(n,stu);//文件内容打印到屏幕
    file_save(n,stu); //将数组内容保存到文件
    return 0;
}