我尝试对与结构和数组有关的字符串使用冒泡排序。基本上,我想比较按字母顺序排列的每本书的标题。谁能告诉我我在做什么错?

struct Book
{
    /* Book details */
    char title[MAX_TITLE_LENGTH+1];
    char author[MAX_AUTHOR_LENGTH+1];
    int  year;
};
void menu_print_database(void)
{
    char temp[MAX_AUTHOR_LENGTH+1];
    char title[no_books][MAX_TITLE_LENGTH+1];
    int i,sorted,swaps=0;
    int no_books;

    do
    {
        for (i=0; i<no_books; i++)
        {
            if (strcmp(title[i-1], title[i]) > 0)
            {
                sorted=0;
                strcpy(temp, title[i+1]);
                strcpy(title[i-1], title[i]);
                strcpy(title[i], temp);
                swaps++;
            }
        }
    } while (!sorted);

    for (i=0;i<no_books;i++){
        printf("Title: %s\n",book_array[i].title);
        printf("Author: %s\n",book_array[i].author);
        printf("Year: %d\n",book_array[i].year);
    }
}

最佳答案

1)没有设置title的内容,但是我想您只是跳过了代码的那一部分...而且,char title[no_books][MAX_TITLE_LENGTH+1];使用了一个名为no_books的变量,该变量仅在以后定义。

2)在这里,您尝试在title[-1]时访问i==0

for (i=0; i<no_books; i++)
{
    if (strcmp(title[i-1], title[i]) > 0)


3)sorted应该在for循环之前设置为1(假设数组已排序,如果在if语句中输入,则将sorted设置为0)。

4)交换不正确:strcpy(temp, title[i+1])应为strcpy(temp, title[i-1])

10-02 01:05
查看更多