void return_book(int id) { int i,j; if(!login_menu()) { printf("查找失败!不存在用户信息!\n"); printf("请先登录后再使用!\n"); } printf("现在的库存有:\n"); for(i=0;i<MAX_BOOKS;i++) { printf("%d.%s\n",book2[i].id,book2[i].name);//打印初始书单 } printf("请输入您要归还的书籍序号:"); scanf("%d",id); for(i=0;i<MAX_BOOKS;i++) { if(book2[i].id==id) { if(book2[i].borrowed==1) { if(book2[i].id==id) { book2[i].borrowed=0; printf("还书成功!\n"); for(j=MAX_BOOKS-1;j>i;j++) { book2[j+1].id=book2[j].id; strcpy(book2[j+1].name,book2[j].name); book2[j+1].borrowed = book2[j].borrowed; } strcpy(book2[MAX_BOOKS].name,""); book2[MAX_BOOKS].id=0; book2[MAX_BOOKS].borrowed=0; } } else { printf("该书已经被借出!\n"); } } } for(i=0;i<MAX_BOOKS;i++) { printf("%d.%s\n",book2[i].id,book2[i].name);//打印借完书后的新书单 } } 这段代码怎么修改
时间: 2024-03-24 09:35:59 浏览: 46
这段代码可以进行以下修改:
1. 函数定义应该包括返回类型,这里应该加上 `void`。
2. 函数参数 `id` 应该是指针类型,因为需要修改输入的值。
3. 在输入书籍序号时应该使用 `&` 取地址符获取输入值。
4. 在借出书籍后,应该跳出循环遍历,不需要继续遍历,否则会影响性能。
5. 在移动数组元素时,应该从后往前移动,否则会有数据丢失。
6. 在移动数组元素时,应该使用 `strcpy` 拷贝字符串,否则只会复制指针。
7. 在移动数组元素时,应该将最后一个元素清空,否则会影响之后的操作。
修改后的代码如下:
```
void return_book(int *id) {
int i, j;
if(!login_menu()) {
printf("查找失败!不存在用户信息!\n");
printf("请先登录后再使用!\n");
return;
}
printf("现在的库存有:\n");
for(i = 0; i < MAX_BOOKS; i++) {
printf("%d.%s\n", book2[i].id, book2[i].name);
}
printf("请输入您要归还的书籍序号:");
scanf("%d", id);
for(i = 0; i < MAX_BOOKS; i++) {
if(book2[i].id == *id) {
if(book2[i].borrowed == 1) {
book2[i].borrowed = 0;
printf("还书成功!\n");
for(j = MAX_BOOKS - 1; j > i; j--) {
book2[j].id = book2[j - 1].id;
strcpy(book2[j].name, book2[j - 1].name);
book2[j].borrowed = book2[j - 1].borrowed;
}
strcpy(book2[MAX_BOOKS - 1].name, "");
book2[MAX_BOOKS - 1].id = 0;
book2[MAX_BOOKS - 1].borrowed = 0;
break;
} else {
printf("该书已经被借出!\n");
break;
}
}
}
printf("借完书后的新书单:\n");
for(i = 0; i < MAX_BOOKS; i++) {
printf("%d.%s\n", book2[i].id, book2[i].name);
}
}
```
阅读全文