完整代码在http://pan.baidu.com/s/1hqKoRwo
以下为表格代码 运行时只能显示一行 且为最后输入的一行
`void displayuser() //显示所有用户信息
{
FILE *p;
int k, n=0;
system("cls");
p = fopen("card", "r");
while( !feof(p) )
{
fread(&card, sizeof(student), 1, p);
n++;
}
fclose(p);
if( n==0 )
{
printf("没有任何用户信息!\n\n");
}
else{
k = 0;
printf("┏━━━━┳━━━━━┳━━━━━━━┓\n");
printf("┃ 姓名 ┃ 班级 ┃ 学号 ┃\n");
printf("┣━━━━╋━━━━━╋━━━━━━━┫\n");
while(k<=n)
{
if(card[k].stuclass[0] != '\0') //屏蔽空信息
{
printf("┃%-8s┃%-10s┃%-14d┃\n", card[k].stuname, card[k].stuclass, card[k].stunum);
}k++;
}
printf("┗━━━━┻━━━━━┻━━━━━━━┛\n");
}
printf("\n\n按任意键回到主菜单!\n");
getch();
}``
while( !feof(p) )
{
fread(&card, sizeof(student), 1, p);
n++;
}
这个读出来一组数据会把上一组覆盖掉,n增加的时候card也要增加,别用全局数组,用指针让地址随着增加就行
while(k<=n)这个循环没有进入,因为此时k>n.
有两个问题:
第一,下面代码中每次将读出的数据都存入了 card 这个缓冲中,当然仅会有最后读取的数据
while( !feof(p) )
{
fread(&card, sizeof(student), 1, p);
n++;
}
第二,如下面的代码,既然你将 变量 k 记作已处理的数据数目,将此时的 变量n 记作总数据数目,那么当已处理数据数小于总数据数时就应该继续循环,用代码应该表现为 "while(k < n)"
while(k<=n)