实验做不会啊,求捞捞

实验内容:
图书信息处理程序。程序能存储和处理 10 本图书的信息,图书信息包括图
书号(数字编号)和图书名(字符串)。
写几个函数:
1、输入 10 本图书信息(10 本书的图书号和图书名)
2、按图书名排序(应用字符串比较,由小到大),图书号的顺序也随之调整:
3、要求输入一个图书名,用折半查找法找出该本书的图书号:
说明:
从主函数输入要查找的图书名,输出该图书的图书号。
book input 函数是完成10本图书的数据的录入。
book sort函数的作用是选择法排序,按图书名排序(应用字符串比较,由小到大)。
book search 函数的作用是用折半查找的方法找出指定图书名的图书号。
编了半天了,出现诸多问题,求捞捞

开写

# include<stdio.h>
# include<String.h>
# include<stdlib.h>

typedef struct book
{
  int id;
  char name[32];
}book;
//输入10本书的信息
void book_input(book Book[10]){
    int i=0;
    for(i=0;i<10;i++){
        printf("请输出第%d本书的信息:\n",i+1);
        scanf("%d %s",&Book[i].id,Book[i].name);
    }
}
// 图书名称从小到大排序
void sorr( book Book[10],int n)
{
    int i, j;
    int s, t;
    char b[30];
    for(i=0; i<n; i++) {
        for(j=0; j<n-1-i; j++) {
            if(strcmp(Book[j].name,Book[j+1].name)>0) {
  
                t = Book[j].id;
                Book[j].id = Book[j+1].id;
                Book[j+1].id = t;

                strcpy(b, Book[j].name);
                strcpy(Book[j].name, Book[j+1].name);
                strcpy(Book[j+1].name, b);
            }
        }
    }
    printf("图书信息从小到大排序如下\n");
    printf("ID\tName\n");
    for(i=0; i<n; i++) {
        printf("%d\t%s\n", Book[i].id,Book[i].name);
    }
}
//折半法查找
int binary_search(book Book[10],char a[32],int n)
{
    int low = 0;    //定义low为0号元素
    int high = n - 1; //定义high为下标最大的元素
    int mid;        //数组中间元素的下标
    
    while (low <= high)        //只要低号位元素小于或等于高号位元素,说明还没查找到元素,循环继续
    {
        mid = (low + high) / 2;        //中间元素下标定义
        if (strcmp(Book[mid].name,a)<0)        //当所查找的元素比中间值大,说明要查找的元素在右半区,
        {    
            low = mid + 1;        //key在右半区,改变low的值
        }
        else if (strcmp(Book[mid].name,a)>0) //当所查找的元素比中间值小,说明要查找的元素在左半区,
        {
            high = mid - 1;        //key在左半区,改变high的值
        }
        else                    //如果前面两个条件都不满足,说明已经找到key 满足条件 key==mid  返回mid
        {
            return mid;        
        }
    }
    return -1;    //当跳出循环还没有返回值,说明没找到想要的元素,返回-1
}
int main(){
    book Book[10];
    char a[32];
    int i,index,result=1;
   book_input(Book);
   printf("\n");
   printf("----------图书管理系统----------\n");
   printf("-------1:从小到大按图书名排序----\n");
   printf("-------2:按书名查找信息----------\n");
   printf("-------0:退出系统----------\n");

   for(;;){
   printf("请输入你的选择:");
   scanf("%d",&i);
   switch (i)
   {
   case 1:
    sorr(Book,10);
    printf("\n");
    break;
   case 2:
     printf("请输入查找的图书名称:\n");
     scanf("%s",a);
     index=binary_search(Book,a,10);
      if(index==-1){printf("没有该图书信息。\n");}
     else{
      printf("编号为:%d,名称为:%s\n",Book[index].id,Book[index].name);
     }
     break;
   case 0:
       result=0;
       break;
   default:
     printf("指令错误\n");
    break;
   }
   if(result==0){break;}
   else{continue;}
   }
    return 0;
}

我运行没问题,有问题可以说,有用请采纳

typedef struct book
{
    int id;
    char name[32];
}book;

book a[32];  //不会返回结构体数组,就定义的全局变量

void booksort(book *a)
{
    for (int i=0;i<10;i++)
    {
        for (int j=0;j<9-i;j++) {
            if(strcmp(a[j].name,a[j+1].name)>0)
            {
                book *p,*q,str;
                p=&a[j];
                q=&a[j+1];

                str=*p;
                p=q;
                q=&str;

                a[j]=*p;
                a[j+1]=*q;
            }
        }
    }
    for (int i=0;i<10;i++) {
        printf("\n");
        printf("%d %s\n",a[i].id,a[i].name);
    }

}

void booksearch(book *a,char s[])
{
    int low=0,high=10,mid;
    while (high>=low)
    {
        mid=(high+low)/2;
        if(strcmp(s,a[mid].name)<0)
        {
            high=mid-1;
        }
        else if (strcmp(s,a[mid].name)>0) {
            low=mid+1;
        }
        if(strcmp(s,a[mid].name)==0)
        {
            printf("%d %s\n",a[mid].id,a[mid].name);
            break;
        }
    }
}

void bookinput()
{
    for (int i=0;i<10;i++) {
        scanf("%d%s",&a[i].id,a[i].name);
    }
}


int main()
{
    bookinput();
    booksort(a);
    char s[32];
    scanf("%s",s);
    booksearch(a,s);

}

出问题的地方断点调试