void deletebook(Book bookList[]) { char delete_bookname[30]; for(int j=0;j<numbooks;j++) { printf("%s.%s\t %s\t %s\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"); print_books(); } } for(int j=0;j<numbooks;j++) { printf("%s.%s\n",bookList[j].id,bookList[j].name,bookList[j].author,bookList[j].press);//打印借完书后的新书单 } }怎么改正
时间: 2024-03-31 07:36:19 浏览: 29
这段代码存在一些问题,可能会导致程序出错。首先,第一个问题是在第二个循环中,删除一个图书之后,应该退出循环。否则,可能会继续删除图书,或者试图删除一个不存在的图书,导致程序出错。其次,在第一个循环中打印书单时,应该只打印图书的编号和书名,否则会打印出多余的信息。最后,删除图书后应该打印新的书单,而不是在循环中打印。
下面是修改后的代码:
void deletebook(Book bookList[]) {
char delete_bookname[30];
for(int j=0;j<numbooks;j++) {
printf("%s.%s\n",bookList[j].id,bookList[j].name);//只打印编号和书名
}
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");
print_books();
break; //删除完成后退出循环
}
}
for(int j=0;j<numbooks;j++) {
printf("%s.%s\n",bookList[j].id,bookList[j].name);//打印新书单
}
}
阅读全文