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