m0_71979759 2022-07-08 16:40 采纳率: 100%
浏览 90
已结题

c语言学生信息管理系统查找不出已录入信息

问题遇到的现象和发生背景 c语言学生管理系统,查找不出已录入信息,请各位帮忙看下哪里出问题了。
问题相关代码,请勿粘贴截图

//查找学生信息
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;
}
}
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • a5156520 2022-07-08 17:36
    关注

    应该是没打开文件,我用你提供的代码加上打开文件的代码,测试发现正常运行。
    修改如下:

    #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;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月16日
  • 已采纳回答 7月8日
  • 创建了问题 7月8日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)