//查找学生信息
void seek()
{
struct student stu;
printf("查找学生信息..\n");
if(!fp)
{
printf("请先加载文件后再使用!\n");
system("pause");
}
else
{
rewind(fp);
printf("输入要查找的学生姓名:");
scanf("%s",szName);
p = fread(&stu,sizeof(stu),1,fp);
while(p>0)
{
if(strcmp(stu.StudentName,szName)==0)
{
find++;
printf("%06d,%10s,%2s,%2d\n",stu.StudentId,stu.StudentName,stu.StudentSex, stu.StudentAge);
}
p = fread(&stu,sizeof(stu),1,fp);
}
if(find == 0)
{
printf("不存在学生【%s】\n",szName);
system("pause");
}
else
{
printf("找到%d条信息、n",find);
system("pause");
find=0;
}
}
}
应该是没打开文件,我用你提供的代码加上打开文件的代码,测试发现正常运行。
修改如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student{
int StudentId;
char StudentName[10];
char StudentSex[4];
int StudentAge;
};
void seek()
{
struct student stu;
char szName[10];
int find=0;
printf("查找学生信息..\n");
FILE * fp=fopen("students.txt","r");
if(!fp)
{
printf("请先加载文件后再使用!\n");
system("pause");
}
else
{
rewind(fp);
printf("输入要查找的学生姓名:");
scanf("%s",szName);
int p = fread(&stu,sizeof(struct student),1,fp);
while(p>0)
{
if(strcmp(stu.StudentName,szName)==0)
{
find++;
printf("%06d,%10s,%2s,%2d\n",stu.StudentId,stu.StudentName,stu.StudentSex, stu.StudentAge);
}
p = fread(&stu,sizeof(stu),1,fp);
}
if(find == 0)
{
printf("不存在学生【%s】\n",szName);
system("pause");
}
else
{
printf("找到%d条信息、n",find);
system("pause");
find=0;
}
}
}
int main(void){
struct student s[2]={
{1,"张三", "男",25 },
{2,"李四", "男",23 },
};
FILE * fp = fopen("students.txt","w");
if(fp==NULL){
printf("文件打开或创建失败!\n");
return 0;
}
//两个学生结构信息写入文件
fwrite(&s[0],sizeof(struct student),1,fp);
fwrite(&s[1],sizeof(struct student),1,fp);
fclose(fp);
fp = fopen("students.txt","r");
if(fp==NULL){
printf("文件打开失败!\n");
return 0;
}
struct student s2[2];
//从文件读取两个学生信息,以验证文件写入正确
fread(&s2[0],sizeof(struct student),1,fp);
fread(&s2[1],sizeof(struct student),1,fp);
fclose(fp);
//打印从文件读取的学生信息
printf("%06d,%10s,%2s,%2d\n",s2[0].StudentId,s2[0].StudentName,s2[0].StudentSex, s2[0].StudentAge);
printf("%06d,%10s,%2s,%2d\n",s2[1].StudentId,s2[1].StudentName,s2[1].StudentSex, s2[1].StudentAge);
//测试查找学生
seek();
return 0;
}
学习一下