二进制文件读入到结构体并输出,再将该结构体数组根据字典序由大到小进行排序再输出。

现有一存储了三位学生信息的二进制文件,该二进制文件由一个结构体数组写入生成 该结构体数组定义如下: typedef struct studentMessage { char name[20]; char address[30]; char phone[12]; }stuMsg; stuMsg students[3]; 请将该二进制文件里的数据重新读入到该结构体内,并输出。而后将该结构体数组根据学生姓名字典序由大到小进行排序再输出。 【输入形式】 输入为一二进制文件,其文件名为class.dat。 【输出形式】 前三行为文件内容,第四行为空行,再之后三行为排序后的内容。 【样例输入】 若二进制文件内的内容为(为了方便阅读,将二进制文件所代表的可读字符以如下格式化的方式呈现,真实内容是这些字符对应的ASCII码,也不会有换行): Andy Tokyo 13838388388

Lucy London 13999939399

Cathy Paris 13000030300 【样例输出】 则输出为: Andy Tokyo 13838388388

Lucy London 13999939399

Cathy Paris 13000030300

Andy Tokyo 13838388388

Cathy Paris 13000030300

Lucy London 13999939399 写这么多还是错的: #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct studentMessage { char name[20]; char address[30]; char phone[12]; }stuMsg; stuMsg students[3]; int main() { int i=0,j; stuMsg students[3]; FILE *fp; if((fp=fopen("class.dat","r"))==NULL) { printf("Can not open file\n"); exit(1); }

while(!feof(fp))
{ 
    fscanf(fp,"%s%s%s",&student[i].name,&student[i].address,&student[i].phone);
    i++;
}    
j=i;
for(i=0;i<j;i++)
    printf("%s%s%s",&student[i].name,&student[i].address,&student[i].phone);
fclose(fp);             
char str[8][9]={"student[0].name","student[1].name","student[2].name"};
char temp[9];
int i,l;
for (i=0;i<8;i++)
{
    for (l=0;l<9;l++)
    {
        printf("%c",str[i][l]);
    }
    printf("\n");
}
int j,k;
for( j=0;j<8;j++)
for( k=j+1;k<8;k++)
{
        if(strcmp(str[j],str[k])>0)
        {
            strcpy(temp,str[j]);
            strcpy(str[j],str[k]);
            strcpy(str[k],temp);
        }
}
    for(i=0;i<8;i++)
        printf("%s\n",str[i]);

return 0;

}

如果是二进制文件,读取的时候应该用"rb"模式,不应该是"r"