| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 973 人关注过本帖
标题:一道C语言编程题,不知道错在哪里,求大神解答!
只看楼主 加入收藏
冬沫夏
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-10-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
一道C语言编程题,不知道错在哪里,求大神解答!
void qunban() //按班级查询
{
    struct student
    {
        char name[20];
        char num[12];
        float score;
        int banji;
    }stu[1000];
    struct studbanji
    {
        char name[20];
        char num[12];
        float score;
        int banji;
    }stubj[1000];
    FILE *fp;
    int i=0,k=0,j,pd,sbanji;
    float t;
    char str1[20],str2[12];
    do
    {
        printf("----------------------------\n");
        printf("请输入所查询的班级:\n"); scanf("%d",&sbanji);
    if((fp=fopen("stud_score.dat","rb"))==NULL)
        {    printf("不能打开文件\n");
             exit(0);         }
    printf("----------------------------\n");
    printf("姓名 学号 成绩  班级\n");
    do
        {    fread(&stu[i],sizeof(struct student),1,fp);
             if(sbanji==stu[i].banji)
             {
                 strcpy(stubj[k].name,stu[k].name);
                 strcpy(stubj[k].num,stu[k].num);
                 stubj[k].score==stu[k].score;
                 k++;
             }
             i++;
        }while(!feof(fp));
        fclose(fp);
        for(i=0;i<k;i++)
            for(j=0;j<k-i;j++)
        {
            if(stubj[j].score<stubj[j+1].score)
            {
                strcpy(str1,stubj[j+1].name); strcpy(stubj[j+1].name,stubj[j].name);
                strcpy(stubj[j].name,str1);
                strcpy(str2,stubj[j+1].num); strcpy(stubj[j+1].num,stubj[j].num);
                strcpy(stubj[j].num,str2);
                t=stubj[j+1].score; stubj[j+1].score==stubj[j].score; stubj[j].score=t;
            }
        }
        for(i=0;i<k;i++)
            printf("%s  %s  %.1f   %d\n",stubj[i].name,stubj[i].num,stubj[i].score,stubj[i].banji);
        printf("----------------------------\n");
        printf("请选择是否继续查询?\n");
        printf("1.是  0.否\n");
        scanf("%d",&pd); getchar();
    }while(pd==1);
}
输入班级后查出来是
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: C语言 
2016-10-16 12:00
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:10 
if(sbanji==stu[i].banji)
             {
                 strcpy(stubj[k].name,stu[k].name);    //后面这个是不是用的stu[i].name哦,后面也一样,i才表示当前读到的数据的下标
                 strcpy(stubj[k].num,stu[k].num);
                 stubj[k].score==stu[k].score;
                 k++;
             }
2016-10-16 12:48
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:10 
回复 2楼 word123
用i本来就没错,你改它做什么。
2016-10-16 13:01
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
不用定义两个结构体,一个就好了
struct student
    {
        char name[20];
        char num[12];
        float score;
        int banji;
    }stu[1000],stubj[1000],s;        //这里的s用作中间量。
线性表的交换可以这样用:s=stu[i];stu[i]=stu[i+1];stu[i+1]=s;
do{…………}while(!feof(fp))这里这样用有个不好的地方就是最后一个结构体会被读取两次。
2016-10-16 13:09
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:0 
回复 3楼 linlulu001
请你好好看一下它的程序再看一下我的回答吧
2016-10-16 21:12
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 5楼 word123
不好意思,还以为是你将i改成k了。
2016-10-16 22:28
快速回复:一道C语言编程题,不知道错在哪里,求大神解答!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029736 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved