karms 2016-06-23 01:35 采纳率: 50%
浏览 1182
已采纳

C++写一个txt查询时出错

写了一个按照学号Sno查询的程序,运行的时候都是打出最后一行,哪位大神帮我指正一下,感激不尽。

 #include<stdio.h>

#define N 1024
#define RECORDLENGTH 1000

struct Student         //定义基本表——Student
{
    long long int Sno;      //学生学号
    char Sname[20];    //学生姓名
    char Ssex[6];      //学生性别
    int Sage;          //学生年龄
    char Sdept[20];    //学生所在系
};

int main()
{
    FILE *fp;
    int n,i,num[N],m;
    char buffer[RECORDLENGTH+1];
    Student mp;
    if( fp=fopen("StudentData.txt","r"))
    {
        n=0;
        while (!feof(fp))
        {
            fgets(buffer,RECORDLENGTH+1,fp);
            sscanf(buffer,"%lld",num+n);
            n++;
        }
        printf("请输入序号:");
        scanf("%lld",&m);
        for( i=0;i<n;i++)
            if ( num[i]==m )
                break;
        if ( i<n )
        {
            fseek(fp, (long)i*RECORDLENGTH , (int)fp);
            fgets(buffer,RECORDLENGTH+1,fp);
            sscanf(buffer,"%lld %s %s %d %s",&mp.Sno,&mp.Sname,&mp.Ssex,&mp.Sage,&mp.Sdept);
            printf("学号  姓  名 性别 年龄 所在系\n");
            printf("%04lld %8s %4s %4d %4s\n",mp.Sno,mp.Sname,mp.Ssex,mp.Sage,mp.Sdept);
        }
        else
            printf("没有找到序号为%lld的记录。\n",num);
        fclose(fp);
    }
    else
    {
        printf("无法打开文件读取数据。\n");
        //exit();
    }
}

一下是StudentBase.txt里面的内容
2014010624 艾伦 男 19 IS
2014010413 郭宁 男 20 EN
2014010908 王凯 男 19 IS
2014021111 刘莉 女 19 EN
2014011536 陈军 男 21 IS
2014021314 赵爽 女 18 CA
2014010715 李宁 女 22 IS
2014010245 乔治 男 21 EN
2014021212 张雪 女 19 IS
2014021629 孙楠 男 23 CA
2014012231 马丁 男 20 CA

  • 写回答

4条回答

  • 小灸舞 2016-06-23 02:58
    关注

    把if ( num[i]==m )判断放到读文件的里面就可以了,找到num就break,然后再fseek一行,再输入就可以了

     #include<stdio.h>
    #include<string.h>
    #define N 1024
    #define RECORDLENGTH 1000
    
    struct Student         //定义基本表——Student
    {
        long long int Sno;      //学生学号
        char Sname[20];    //学生姓名
        char Ssex[6];      //学生性别
        int Sage;          //学生年龄
        char Sdept[20];    //学生所在系
    };
    
    int main()
    {
        FILE *fp;
        int n,i = 0,num[N];
        long long int m;
        char buffer[RECORDLENGTH+1];
        Student mp;
        if( fp=fopen("F:\\StudentData.txt","r"))
        {
            n=0;
            int size = 0;
            printf("请输入序号:");
            scanf("%lld",&m);
            while (!feof(fp))
            {
                fgets(buffer,RECORDLENGTH+1,fp);
                size = strlen(buffer);
                sscanf(buffer,"%lld",num+n);
                if (num[n]==m)
                {
                    i = 1;
                    break;
                }
                n++;
            }
    
            if ( i == 1 )
            {
                fseek(fp, -size-1 , SEEK_CUR);
                fgets(buffer,RECORDLENGTH+1,fp);
                sscanf(buffer,"%lld %s %s %d %s",&mp.Sno,&mp.Sname,&mp.Ssex,&mp.Sage,&mp.Sdept);
                printf("学号  姓  名 性别 年龄 所在系\n");
                printf("%04lld %8s %4s %4d %4s\n",mp.Sno,mp.Sname,mp.Ssex,mp.Sage,mp.Sdept);
            }
            else
                printf("没有找到序号为%lld的记录。\n",num);
            fclose(fp);
        }
        else
        {
            printf("无法打开文件读取数据。\n");
            //exit();
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧