void deletebook(Book bookList[]) { char delete_bookname[30]; for(int j=0;j<numbooks;j++) { printf("%5s\t%15s\t%10s\t%25s\n",bookList[j].id,bookList[j].name,bookList[j].author,bookList[j].press); } printf("请输入要删掉的书名:"); scanf("%s",delete_bookname); for(int j=0;j<numbooks;j++) { if(strcmp(bookList[j].name,delete_bookname)==0) { strcpy(bookList[j].id,bookList[j+1].id); strcpy(bookList[j].name,bookList[j+1].name); strcpy(bookList[j].author,bookList[j+1].author); strcpy(bookList[j].press,bookList[j+1].press); numbooks--; printf("删除图书信息成功!\n"); break; } } for(int j=0;j<numbooks;j++) { printf("%5s\t%15s\t%10s\t%25s\n",bookList[j].id,bookList[j].name,bookList[j].author,bookList[j].press); } }怎么改正
时间: 2024-03-25 11:37:14 浏览: 53
t_book(从mysql下载查询结果的数据库表)
这段代码的问题在于,在删除一本书籍之后,将后面所有书籍的信息向前移动,但是最后一本书籍的信息并没有被更新,导致输出时出现了重复信息。为了避免这种情况,我们可以将最后一本书籍的信息移到已删除的书籍位置,然后再将最后一本书籍的信息删除。修改后的代码如下:
```
void deletebook(Book bookList[]) {
char delete_bookname[30];
for(int j=0;j<numbooks;j++) {
printf("%5s\t%15s\t%10s\t%25s\n",bookList[j].id,bookList[j].name,bookList[j].author,bookList[j].press);
}
printf("请输入要删掉的书名:");
scanf("%s",delete_bookname);
int delete_index = -1;
for(int j=0;j<numbooks;j++) {
if(strcmp(bookList[j].name,delete_bookname)==0) {
delete_index = j;
break;
}
}
if(delete_index != -1) {
strcpy(bookList[delete_index].id,bookList[numbooks-1].id);
strcpy(bookList[delete_index].name,bookList[numbooks-1].name);
strcpy(bookList[delete_index].author,bookList[numbooks-1].author);
strcpy(bookList[delete_index].press,bookList[numbooks-1].press);
numbooks--;
printf("删除图书信息成功!\n");
} else {
printf("没有找到该书籍!\n");
}
for(int j=0;j<numbooks;j++) {
printf("%5s\t%15s\t%10s\t%25s\n",bookList[j].id,bookList[j].name,bookList[j].author,bookList[j].press);
}
}
```
这样修改后,当删除一本书籍时,已删除的书籍信息将被最后一本书籍的信息覆盖,然后将最后一本书籍的信息删除,避免了重复输出的问题。
阅读全文