int borrow_book(Book bookList[]) { int j; char id[30]; for(int i=0;i<numbooks;i++) { printf("%-5s%-15s\n",bookList[i].id,bookList[i].name); } printf("请输入您想借阅的书号:"); scanf("%s",id); for(int i=0;i<numbooks;i++) { if(strcmp(bookList[i].id,id)==0) { for(j=i;j<numbooks-1;j++) { strcpy(bookList[j].id,bookList[j+1].id); strcpy(bookList[j].name,bookList[j+1].name); bookList[j+1].id[0] = '\0'; bookList[j+1].name[0] = '\0'; } numbooks--; printf("借阅成功!\n"); return 1; } else { printf("您输入的书号有误,请重新输入!\n");return 0; } } for(int i=0;i<numbooks;i++) { printf("%-5s%-15s\n",bookList[i].id,bookList[i].name); } }怎么改正
时间: 2024-03-25 17:42:13 浏览: 19
此函数有两个问题:
1. 在第二个for循环中,如果第一个书籍ID不匹配,函数就会返回0并结束,这意味着它永远不会检查其他书籍是否匹配。应该将第二个for循环移到if语句外面,以便在检查完所有书籍后再返回0。
2. 在移动数组元素时,只需要将元素的值向前移动一个位置,而不需要将最后一个元素清空。因此,应该将`bookList[j+1].id[0] = '\0';`和`bookList[j+1].name[0] = '\0';`移动到for循环外面。
下面是修改后的代码:
```
int borrow_book(Book bookList[]) {
int j;
char id[30];
for(int i=0; i<numbooks; i++) {
printf("%-5s%-15s\n", bookList[i].id, bookList[i].name);
}
printf("请输入您想借阅的书号:");
scanf("%s", id);
for(int i=0; i<numbooks; i++) {
if(strcmp(bookList[i].id, id) == 0) {
for(j=i; j<numbooks-1; j++) {
strcpy(bookList[j].id, bookList[j+1].id);
strcpy(bookList[j].name, bookList[j+1].name);
}
numbooks--;
printf("借阅成功!\n");
return 1;
}
}
printf("您输入的书号有误,请重新输入!\n");
for(int i=0; i<numbooks; i++) {
printf("%-5s%-15s\n", bookList[i].id, bookList[i].name);
}
return 0;
}
```