一个关于从文件中读取数据的问题
当我第一次打开程序时往线性表中输入数据,在关闭程序时用case 1将线性表中的数据存入到文件中(这一步是可以的,已经产生文件,并且存入了数据),接着关闭程序,我原本的想法是想在再一次打开这个程序时,直接用case 2将文件中数据写入线性表中,然后显示数据,但这一步不行没有显示任何数据,请教。。。typedef struct link
{
char name[20]; //参赛者姓名
char yuanxi[20]; //参赛者院系
char xingbie[20]; //参赛者性别
int xuehao; //参赛者学号
float data; //参赛者成绩
}link ;
typedef struct
{
link *elem;
int length;
int listsize;
}Sqlist;
a(Sqlist *L)/*把线性表L中的数据存入50米成绩.doc文件中*/
{
int i;
FILE *fp; /*定义文件指针*/
if((fp=fopen("50米成绩.doc","wb"))==NULL) /*打开文件*/
{
printf("\t\t\tcann't open the file\n");
system("pause");
return;
}
fprintf(fp,"姓名: %s 性别: %s 院系: %s 学号 %d 分数: %3.3f\n\n",L->elem[i].name, L->elem[i].xingbie,L->elem50[i].yuanxi,L->elem[i].xuehao,L->elem[i].data); /*把已经存在的数据存进50米成绩.doc这个文件中*/
}
b(Sqlist *L)/*把文件中的数据读取出来存入线性表L中*/
{
int i;
char c[20],p[20],q[20];
FILE *fp; /*定义文件指针*/
if((fp=fopen("50米成绩.doc","r"))==NULL) /*打开文件*/
{
printf("\t\t\tcann't open the file\n");
system("pause");
return;
}
for(i=0;i<L->length;i++)
{
fscanf(fp,"%s%s%s%d%f",c, q,p,&L->elem[i].xuehao,&L->elem[i].data);/*把文件中的数据导入线性表L中*/
strcpy(L->elem[i].name,c);
strcpy(L->elem[i].xingbie,q);
strcpy(L->elem[i].yuanxi,p);
}
fclose(fp);
}
Outputdata(Sqlist *L)//函数功能:输出完成后的比赛成绩
{
float f;
int i;
char c;
printf(" 比赛成绩排名\n");
if(L->length>3)
{
for(i=0;i<3;i++)
{
printf("姓名: %s 性别: %s 院系: %s 学号: %d 分数: %3.3f\n",L->elem[i].name, L->elem[i].xingbie,L->elem[i].yuanxi,L->elem[i].xuehao,L->elem[i].data);
}
}
else
{
for(i=0;i<L->length;i++)
{
printf("姓名: %s 性别: %s 院系: %s 学号: %d 分数: %3.3f\n",L->elem[i].name, L->elem[i].xingbie,L->elem[i].yuanxi,L->elem[i].xuehao,L->elem[i].data);
}
}
}
main()/*主函数*/
{
while(i<4)
switch(i)
{
case 1:
.....(前面一段代码是往线性表中输入数据之类的,如果需要的话我在补上)
a(&L);/*将数据写入文件中*/
break;
case 2:
b(&L);/*将文件中的数据写入到线性表L忠*/
break;
case 3:
Outputdata(&L);/*显示数据*/
break;
default:
break;
}
}
[ 本帖最后由 cai85204550 于 2012-5-14 14:11 编辑 ]