typedef struct { char id[30]; char name[30]; //书名 char author[30]; //作者 char press[30]; //出版社名 int available;//1表示未借出,0表示已借出 }Book;void deletebook(Book bookList[]) { char delete_bookname[30]; for(int j=0;j<numbooks;j++) { printf("%-5s%-15s%-10s%-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%-15s%-10s%-25s\n",bookList[j].id,bookList[j].name,bookList[j].author,bookList[j].press); } 怎么更改
时间: 2024-03-25 15:37:51 浏览: 59
typedef_struct与struct之间的区别
这段代码实现的功能是删除图书信息,但是存在一个问题,即在删除一本书之后,将该书后面的所有书的信息向前移动一个位置,这可能会导致最后一本书的信息没有被删除。可以通过将最后一本书的信息复制到要删除的书的位置上,并将最后一本书的信息清空来解决这个问题。修改后的代码如下:
```
void deletebook(Book bookList[]) {
char delete_bookname[30];
for(int j=0;j<numbooks;j++) {
printf("%-5s%-15s%-10s%-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) {
if(j == numbooks - 1) {
// 如果是最后一本书,直接将 numbooks 减一
numbooks--;
} else {
// 否则将最后一本书的信息复制到要删除的书的位置上,并将最后一本书的信息清空
strcpy(bookList[j].id, bookList[numbooks-1].id);
strcpy(bookList[j].name, bookList[numbooks-1].name);
strcpy(bookList[j].author, bookList[numbooks-1].author);
strcpy(bookList[j].press, bookList[numbooks-1].press);
bookList[numbooks-1].id[0] = '\0';
bookList[numbooks-1].name[0] = '\0';
bookList[numbooks-1].author[0] = '\0';
bookList[numbooks-1].press[0] = '\0';
numbooks--;
}
printf("图书信息删除完成!\n");
break;
}
}
for(int j=0;j<numbooks;j++) {
printf("%-5s%-15s%-10s%-25s\n",bookList[j].id,bookList[j].name,bookList[j].author,bookList[j].press);
}
}
```
阅读全文