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[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); numbooks--; printf("删除图书信息成功!\n"); } } for(int j=0;j<numbooks;j++) { printf("%5s\t%15s\t%10s\t%25s\n",j+1,bookList[j].name,bookList[j].author,bookList[j].press);//打印借完书后的新书单 } }怎么改正
时间: 2024-03-25 15:36:12 浏览: 54
在这个函数中,我们使用了 `strcpy` 函数来复制结构体变量的值,但是结构体中包含一个字符串类型的变量,我们需要使用字符串的复制函数 `strcpy` 或 `strncpy` 来复制字符串变量的值。同时,在打印书籍列表时,我们使用了 `%5s` 来打印书籍编号,但是书籍编号是一个整数类型的变量,应该使用 `%d`。
修改后的代码如下:
```
void deletebook(Book bookList[], int *numbooks) {
char delete_bookname[30];
for (int j = 0; j < *numbooks; j++) {
printf("%d\t%15s\t%10s\t%25s\n", j+1, 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[*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);
(*numbooks)--;
printf("删除图书信息成功!\n");
}
}
for (int j = 0; j < *numbooks; j++) {
printf("%d\t%15s\t%10s\t%25s\n", j+1, bookList[j].name, bookList[j].author, bookList[j].press);
}
}
```
在这个修改后的函数中,我们将书籍编号改为了整数类型,并使用 `%d` 来打印书籍编号。我们还将 `numbooks` 参数改为了指向整数的指针,并使用 `*numbooks` 来表示当前书籍数目。在复制字符串变量时,我们使用了 `strcpy` 函数,并将所有 `numbooks` 改为 `*numbooks`,以便在修改书籍数目时更新参数的值。
阅读全文