void inputxinxi()//1.信息录入 { if((fp=fopen("stud.dat","wb"))==NULL) { printf("不能打开此文件"); exit(1); } printf("准备录入几名同学的?\n"); scanf("%d",&m); printf("输入学生的学号 姓名 性别 年龄 所属学院\n"); for(i=0;i<m;i++) { scanf("%d %s %s %d %s",&n[i].num,n[i].name,n[i].sex,&n[i].year,n[i].where); fwrite(&n[i],sizeof(struct student),1,fp); } fclose(fp); } void foundxinxi()//2.信息查找 { int xuehao1; if((fp=fopen("stud.dat","rb"))==NULL) { printf("不能打开文件!"); exit(1); } printf("输入需要寻找的学号:\n"); scanf("%d",&xuehao1); for(i=0;i<100;i++) { fread(&n[i],sizeof(struct student),1,fp); if(xuehao1==n[i].num) { printf("序号为%d的学生\n姓名:%s\n性别:%s\n年龄:%d\n所在院系:%s\n" ,xuehao1,n[i].name,n[i].sex,n[i].year,n[i].where);break;//查到后直接退出循环 } } fclose(fp); }第一次启动输入信息后可以查询到,第二次启动,直接查询信息,查询不到
时间: 2024-03-27 16:38:44 浏览: 57
这段代码存在一个问题,就是在查找学生信息的时候,使用了 `fread` 函数读取文件中的信息,但是没有将文件指针移动到文件开头,所以第二次启动程序时,直接调用 `foundxinxi` 函数时,文件指针指向了文件的末尾,无法读取到有效的信息。解决方法是在每次查找前,调用 `fseek` 函数将文件指针移动到文件开头,再进行读取操作。
修改后的代码如下:
```c
void foundxinxi()//2.信息查找
{
int xuehao1;
if((fp=fopen("stud.dat","rb"))==NULL)
{
printf("不能打开文件!");
exit(1);
}
printf("输入需要寻找的学号:\n");
scanf("%d",&xuehao1);
fseek(fp, 0, SEEK_SET); // 将文件指针移动到文件开头
for(i=0;i<100;i++)
{
fread(&n[i],sizeof(struct student),1,fp);
if(xuehao1==n[i].num)
{
printf("序号为%d的学生\n姓名:%s\n性别:%s\n年龄:%d\n所在院系:%s\n"
,xuehao1,n[i].name,n[i].sex,n[i].year,n[i].where);
break; //查到后直接退出循环
}
}
fclose(fp);
}
```
这样就可以解决查询不到的问题了。
阅读全文