现有一存储了三位学生信息的二进制文件,该二进制文件由一个结构体数组写入生成 该结构体数组定义如下: 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"