cooyk2 2022-06-11 18:02 采纳率: 66.7%
浏览 31
已结题

c语言排序功能有问题

问题遇到的现象和发生背景

功能6的排序功能问题,排序就排了价格,其他信息没有跟上

问题相关代码,请勿粘贴截图

px();

运行结果及报错内容

可以运行

我的解答思路和尝试过的方法

我想用冒泡排序法去交换价格,但是结构体交换出现问题

我想要达到的结果

按价格排序,相关信息也要有;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct datebate { //定义的数据组
int num1; //书号 //主要结构体
char num2[100]; //书名
char num3[100]; //作者
int num4; //数量
char jianjie[10000];//简介
double jg; //价格
}jy[100];

struct datebate2 {
int rnum1;
char rnum2[100]; //排序时交换的结构体 1
char rnum3[100];
int rnum4;
char rjianjie[10000];
double rjg;
}jy2[100];

struct datebate3 {
int jnum1;
char jnum2[100];
char jnum3[100]; //排序时交换的结构体 2
int jnum4;
char jjianjie[10000];
double jjg;
}jy3[100];

void tb(int i){ // 方便输出

    printf("|                              书号:【 %d 】                                    \n",jy[i].num1);
   
    printf("|                              书名:《 %s 》                                    \n",jy[i].num2);
   
    printf("|                              作者:   %s                                       \n",jy[i].num3); 
    
    printf("|                              数量:   %d                                       \n",jy[i].num4); 
    
    printf("|                              价格:   %.2lf                                    \n",jy[i].jg); 
    
    printf("|                              简介:   %s                                       \n\n\n",jy[i].jianjie);
    

}

void tb2(int i){ //方便输出

    printf("|                              书号:【 %d 】                                    \n",jy2[i].rnum1);
   
    printf("|                              书名:《 %s 》                                    \n",jy2[i].rnum2);
    
    printf("|                              作者:   %s                                       \n",jy2[i].rnum3); 
    
    printf("|                              数量:   %d                                       \n",jy2[i].rnum4); 

    printf("|                              价格:   %.2lf                                    \n",jy2[i].rjg); 

    printf("|                              简介:   %s                                       \n\n\n",jy2[i].rjianjie);
    

}

int add(int a) { //录入书号、作者、数量、价格 、简介

int i = 0;
int j = 0;
int c;
int num1;
int b = a;
printf("请您输入这本书籍的相关信息:\n");
for (i = a; i < 100; i++) {

    printf("这本书的序号:\n");
    scanf("%d", &num1);
    
    for(j=0;j<i;j++)                          //判断是否重复 
    {            if(jy[j].num1==num1)
        {
            printf("学生学号重复,请重新输入:\n");
            scanf("%d",&num1);
            j=-1;
        }
    }
    jy[i].num1 = num1;
    printf("这本书的书名:\n");
    scanf("%s",jy[i].num2); 
    printf("这本书的作者:\n");
    scanf("%s", jy[i].num3);
    printf("这本书的数量:\n");
    scanf("%d", &jy[i].num4);
    printf("这本书的价格:\n");
    scanf("%lf", &jy[i].jg);
    printf("这本书的简介:(五十字以内)\n");
    getchar();
    gets(jy[i].jianjie); 

    printf("您是否要继续录入信息?\n");
    printf("【1是】        【0否】\n");
    scanf("%d", &c);
    b++;
    if (c == 0) {
        break;
    }
}
printf("记录输入信息成功。\n\n");          //输入完成 

getchar();
getchar();
return b;

}

void show(int a) { //书籍展示
int i = 0;
for (i = 0; i < a; i++) {
tb(i);}
system("pause");
}

void   exchange(int a){              // 交换结构体 
int i;
for (i=0;i<a;i++){
     jy2[i].rnum1=jy[i].num1;
    strcpy(jy2[i].rnum2,jy[i].num2);
    strcpy(jy2[i].rnum3,jy[i].num3);
    strcpy(jy2[i].rjianjie,jy[i].jianjie);
     jy2[i].rnum4=jy[i].num4;
     jy2[i].rjg=jy[i].jg;
}}



void exchange2(int a) {              //冒泡排序
 
double wooc;
int wooc2;
int wooc1; 
int min; 
int i=0;
int j=0;
for (i=0;i<a;i++)
{
    min = i;
    for (j=i+1; j<a; j++)
    {
        if (jy2[min].rjg > jy2[j].rjg)
            min = j;
    }
    wooc=jy2[min].rjg;
    wooc1=jy2[min].rnum1;
    wooc2=jy2[min].rnum4;
    strcpy(jy3[min].jnum2,jy2[min].rnum2);
    strcpy(jy3[min].jnum3,jy2[min].rnum3);
    strcpy(jy3[min].jjianjie,jy2[min].rjianjie); 
    
    jy2[min].rjg = jy2[i].rjg;
    strcpy(jy2[min].rnum2,jy2[i].rnum2);
    strcpy(jy2[min].rnum3,jy2[i].rnum3);
    strcpy(jy2[min].rjianjie,jy2[i].rjianjie);
    jy2[min].rnum4 = jy2[i].rnum4;
    jy2[min].rnum1 = jy2[i].rnum1;
    
    
    jy2[i].rjg = wooc;
    strcpy(jy2[min].rnum2,jy3[i].jnum2);
    strcpy(jy2[min].rnum3,jy3[i].jnum3);
    strcpy(jy2[min].rjianjie,jy3[i].jjianjie);
    jy2[min].rnum4 =wooc2;
    jy2[min].rnum1 =wooc1; 
}}

void px(int a) { //排序
int i=0;
double wooc;
exchange(a);
exchange2(a);
for(i = 0;i<a;i++){

 tb2(i);
}


system("pause");

}

void caidan() {
printf("欢迎使用小型图书管理系统\n");
printf("本系统包括下列功能:\n");
printf("(按下键盘上对应数字选择相应功能)\n");
printf("(本系统包括:图书信息管理,图书的基本信息包括书号、书名、作者、单价、数量、简介)\n");

printf("|【1】,                       书籍信息的录入                                    |\n");

printf("|【4】.                        浏览本系统的全部书籍                              |\n");

printf("|【6】.                        按单价排序功能                                    |\n");

printf("|【8】.                        退出本系统                                        |\n");

}

int main() { //主函数
int count = 0;
int c;
while (1)
{
system("cls");
caidan();
scanf("%d", &c);
switch (c)
{
case 1:
count = add(count);
break;

    case 4:
        show(count);
        break;
    
    case 6:
        px(count);
        break;
    
    case 8:
        printf("欢迎您再次使用本系统*\n\n\n\n");
        exit(0);

    }
}

}

  • 写回答

1条回答 默认 最新

  • fuill 2022-06-11 18:29
    关注

    帮你改了一下,把没用的代码注释了,排序交换的是结构体,
    代码如下

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct datebate   //定义的数据组
    {
        int num1; //书号 //主要结构体
        char num2[100]; //书名
        char num3[100]; //作者
        int num4; //数量
        char jianjie[10000];//简介
        double jg; //价格
    } jy[100];
    
    /*struct datebate2
    {
        int rnum1;
        char rnum2[100]; //排序时交换的结构体 1
        char rnum3[100];
        int rnum4;
        char rjianjie[10000];
        double rjg;
    } jy2[100];
    
    struct datebate3
    {
        int jnum1;
        char jnum2[100];
        char jnum3[100]; //排序时交换的结构体 2
        int jnum4;
        char jjianjie[10000];
        double jjg;
    } jy3[100];
    */
    
    void tb(int i)  // 方便输出
    {
    for(int j=0;j<i;j++)
    {
        printf("|                              书号:【 %d 】                                    \n",jy[j].num1);
    
        printf("|                              书名:《 %s 》                                    \n",jy[j].num2);
    
        printf("|                              作者:   %s                                       \n",jy[j].num3);
    
        printf("|                              数量:   %d                                       \n",jy[j].num4);
    
        printf("|                              价格:   %.2lf                                    \n",jy[j].jg);
    
        printf("|                              简介:   %s                                       \n\n\n",jy[j].jianjie);
        }
    }
    
    /*void tb2(int i)  //方便输出
    {
    
        printf("|                              书号:【 %d 】                                    \n",jy2[i].rnum1);
    
        printf("|                              书名:《 %s 》                                    \n",jy2[i].rnum2);
    
        printf("|                              作者:   %s                                       \n",jy2[i].rnum3);
    
        printf("|                              数量:   %d                                       \n",jy2[i].rnum4);
    
        printf("|                              价格:   %.2lf                                    \n",jy2[i].rjg);
    
        printf("|                              简介:   %s                                       \n\n\n",jy2[i].rjianjie);
    
    }*/
    
    int add(int a)   //录入书号、作者、数量、价格 、简介
    {
    
        int i = 0;
        int j = 0;
        int c;
        int num1;
        int b = a;
        printf("请您输入这本书籍的相关信息:\n");
        for (i = a; i < 100; i++)
        {
    
            printf("这本书的序号:\n");
            scanf("%d", &num1);
    
            for(j=0; j<i; j++)                        //判断是否重复
            {
                if(jy[j].num1==num1)
                {
                    printf("学生学号重复,请重新输入:\n");
                    scanf("%d",&num1);
                    j=-1;
                }
            }
            jy[i].num1 = num1;
            printf("这本书的书名:\n");
            scanf("%s",jy[i].num2);
            printf("这本书的作者:\n");
            scanf("%s", jy[i].num3);
            printf("这本书的数量:\n");
            scanf("%d", &jy[i].num4);
            printf("这本书的价格:\n");
            scanf("%lf", &jy[i].jg);
            printf("这本书的简介:(五十字以内)\n");
            getchar();
            gets(jy[i].jianjie);
    
            printf("您是否要继续录入信息?\n");
            printf("【1是】        【0否】\n");
            scanf("%d", &c);
            b++;
            if (c == 0)
            {
                break;
            }
        }
        printf("记录输入信息成功。\n\n");          //输入完成
    
        getchar();
        getchar();
        return b;
    }
    
    void show(int a)   //书籍展示
    {
        int i = 0;
        for (i = 0; i < a; i++)
        {
            tb(i);
        }
        system("pause");
    }
    
    /*void   exchange(int a)               // 交换结构体
    {
        int i;
        for (i=0; i<a; i++)
        {
            jy2[i].rnum1=jy[i].num1;
            strcpy(jy2[i].rnum2,jy[i].num2);
            strcpy(jy2[i].rnum3,jy[i].num3);
            strcpy(jy2[i].rjianjie,jy[i].jianjie);
            jy2[i].rnum4=jy[i].num4;
            jy2[i].rjg=jy[i].jg;
        }
    }
    
    
    
    void exchange2(int a)                //冒泡排序
    {
    
        double wooc;
        int wooc2;
        int wooc1;
        int min;
        int i=0;
        int j=0;
        for (i=0; i<a; i++)
        {
            min = i;
            for (j=i+1; j<a; j++)
            {
                if (jy2[min].rjg > jy2[j].rjg)
                    min = j;
            }
            wooc=jy2[min].rjg;
            wooc1=jy2[min].rnum1;
            wooc2=jy2[min].rnum4;
            strcpy(jy3[min].jnum2,jy2[min].rnum2);
            strcpy(jy3[min].jnum3,jy2[min].rnum3);
            strcpy(jy3[min].jjianjie,jy2[min].rjianjie);
    
            jy2[min].rjg = jy2[i].rjg;
            strcpy(jy2[min].rnum2,jy2[i].rnum2);
            strcpy(jy2[min].rnum3,jy2[i].rnum3);
            strcpy(jy2[min].rjianjie,jy2[i].rjianjie);
            jy2[min].rnum4 = jy2[i].rnum4;
            jy2[min].rnum1 = jy2[i].rnum1;
    
    
            jy2[i].rjg = wooc;
            strcpy(jy2[min].rnum2,jy3[i].jnum2);
            strcpy(jy2[min].rnum3,jy3[i].jnum3);
            strcpy(jy2[min].rjianjie,jy3[i].jjianjie);
            jy2[min].rnum4 =wooc2;
            jy2[min].rnum1 =wooc1;
        }
    }*/
    void px(int a)   //排序
    {
        int i=0,j;
        double wooc;
    
        for(i = 0; i<a-1; i++)
        {
            for(j = 0; j<a-i-1; j++)
            {
                if(jy[j].jg> jy[j+1].jg)
                {
                    struct datebate tem=jy[j];
                    jy[j]=jy[j+1];
                    jy[j+1]=tem;
                }
            }
        }
        tb(a);
        system("pause");
    }
    
    void caidan()
    {
        printf("欢迎使用小型图书管理系统\n");
        printf("本系统包括下列功能:\n");
        printf("(按下键盘上对应数字选择相应功能)\n");
        printf("(本系统包括:图书信息管理,图书的基本信息包括书号、书名、作者、单价、数量、简介)\n");
    
        printf("|【1】,                       书籍信息的录入                                    |\n");
    
        printf("|【4】.                        浏览本系统的全部书籍                              |\n");
    
        printf("|【6】.                        按单价排序功能                                    |\n");
    
        printf("|【8】.                        退出本系统                                        |\n");
    }
    
    int main()   //主函数
    {
        int count = 0;
        int c;
        while (1)
        {
            system("cls");
            caidan();
            scanf("%d", &c);
            switch (c)
            {
                case 1:
                    count = add(count);
                    break;
    
                case 4:
                    show(count);
                    break;
    
                case 6:
                    px(count);
                    break;
    
                case 8:
                    printf("欢迎您再次使用本系统*\n\n\n\n");
                    exit(0);
    
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月19日
  • 已采纳回答 6月11日
  • 创建了问题 6月11日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度