这是一个学生信息管理系统的东西,文件已经存储数据了,但是用输出函数输出不出来,想问一下问题在哪里?
typedef struct studentmessage
{
int number;
char name[20];
char sex;
char address[30];
}STU;
void show_studentmessage()
{
STU students[1000];
FILE *fp;
fp=fopen("file1.txt","r");
if(fp==NULL)
{
printf("打开文件失败");
exit(1);
}
int i=0,j=0;
while(!feof(fp))
{
fread(&students[i],sizeof(STU),1,fp);
printf("%-6d%-6s%-6s%-6s%",students[j].number,students[j].name,students[j].sex,students[j].address);
printf("\n");
i++;
}
i--;
for(j=0;j<=i;j++)
{
printf("%-6d%-6s%-6s%-6s%",students[j].number,students[j].name,students[j].sex,students[j].address);
printf("\n");
}
fclose(fp);
}
这是输出函数
有两个问题可能导致输出不出来。
1、在输出的格式字符串中,最后一个%号多余,应该删除。
2、在读取文件时,应该先判断是否读到了文件末尾,然后再进行读取和输出。
修改后的代码如下:
typedef struct studentmessage
{
int number;
char name[20];
char sex;
char address[30];
}STU;
void show_studentmessage()
{
STU students[1000];
FILE *fp;
fp=fopen("file1.txt","r");
if(fp==NULL)
{
printf("打开文件失败");
exit(1);
}
int i=0,j=0;
while(!feof(fp))
{
if (fread(&students[i],sizeof(STU),1,fp) == 1) {
printf("%-6d%-6s%-6c%-6s",students[j].number,students[j].name,students[j].sex,students[j].address);
printf("\n");
i++;
}
}
i--;
for(j=0;j<=i;j++)
{
printf("%-6d%-6s%-6c%-6s",students[j].number,students[j].name,students[j].sex,students[j].address);
printf("\n");
}
fclose(fp);
}
修改后,可以运行函数 show_studentmessage 来查看存储在文件中的学生信息
程序修改如下试下:
typedef struct studentmessage
{
int number;
char name[20];
char sex;
char address[30];
}STU;
void show_studentmessage()
{
STU students[1000];
FILE *fp;
fp=fopen("file1.txt","r");
if(fp==NULL)
{
printf("打开文件失败");
exit(1);
}
int i=0,j=0;
while( fread(&students[i],sizeof(STU),1,fp)>0)
{
printf("%-6d%-6s%-6s%-6s%",students[j].number,students[j].name,students[j].sex,students[j].address);
printf("\n");
i++;
}
i--;
for(j=0;j<=i;j++)
{
printf("%-6d%-6s%-6s%-6s%",students[j].number,students[j].name,students[j].sex,students[j].address);
printf("\n");
}
fclose(fp);
}