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);

    }
}

}

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

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

        }
    }
}