void addbook(Book bookList) { printf("请输入书名:"); scanf("%s", bookList[numbooks].name); printf("请输入作者:"); scanf("%s", bookList[numbooks].author); printf("请输入出版社名:"); scanf("%s", bookList[numbooks].press); bookList[numbooks].available = 1; numbooks++; printf("添加成功!\n"); }怎么改正
时间: 2024-03-25 13:36:07 浏览: 19
在这个函数中,传递的参数 `bookList` 是一个结构体类型的变量,而不是一个指向结构体的指针。这意味着在函数中对 `bookList` 的修改只会影响到函数内部的副本,而不会影响到原始的结构体变量,因此需要将参数改为指向结构体的指针。
修改后的代码如下:
```
void addbook(Book *bookList, int *numbooks) {
printf("请输入书名:");
scanf("%s", bookList[*numbooks].name);
printf("请输入作者:");
scanf("%s", bookList[*numbooks].author);
printf("请输入出版社名:");
scanf("%s", bookList[*numbooks].press);
bookList[*numbooks].available = 1;
(*numbooks)++;
printf("添加成功!\n");
}
```
在这个修改后的函数中,我们将 `bookList` 参数改为了指向结构体的指针,同时增加了一个 `numbooks` 参数,表示当前已经添加的书籍数目。在函数内部,我们使用指针操作来修改结构体变量,并使用 `*numbooks` 来表示当前书籍数目。最后,我们需要使用 `(*numbooks)` 将指针解引用,以便在增加书籍之后更新书籍数目的值。
相关问题
void addbook() { printf("请输入书名:"); scanf("%s", bookList[numbooks].name); printf("请输入作者:"); scanf("%s", bookList[numbooks].author); printf("请输入出版社名:"); scanf("%d", bookList[numbooks].press); bookList[numbooks].available = 1; numbooks++; printf("添加成功!\n"); }怎么改
这段代码存在一个问题,即在输入出版社名时使用了错误的格式化字符串,应该使用 `%s` 而不是 `%d`。修改后的代码如下:
void addbook() {
printf("请输入书名:");
scanf("%s", bookList[numbooks].name);
printf("请输入作者:");
scanf("%s", bookList[numbooks].author);
printf("请输入出版社名:");
scanf("%s", bookList[numbooks].press);
bookList[numbooks].available = 1;
numbooks++;
printf("添加成功!\n");
}
void addbook(Book booklist[]) { printf("请输入书籍序号:"); scanf("%s",bookList[numbooks].id); printf("请输入书名:"); scanf("%s",bookList[numbooks].name); printf("请输入作者:"); scanf("%s",bookList[numbooks].author); printf("请输入出版社名:"); scanf("%s",bookList[numbooks].press); bookList[numbooks].available = 1; numbooks++; printf("添加成功!\n"); }怎么改正
这段代码中有一个问题:函数的参数为`booklist[]`,但是在函数体内却使用了`bookList`,大小写不一致,导致编译器无法识别。另外,在输入字符串时应该使用`fgets`函数,以避免输入过长的字符串导致内存溢出。
下面是修改后的代码:
```c
void addbook(Book booklist[]) {
printf("请输入书籍序号:");
fgets(booklist[numbooks].id, MAX_ID_LEN, stdin);
printf("请输入书名:");
fgets(booklist[numbooks].name, MAX_NAME_LEN, stdin);
printf("请输入作者:");
fgets(booklist[numbooks].author, MAX_AUTHOR_LEN, stdin);
printf("请输入出版社名:");
fgets(booklist[numbooks].press, MAX_PRESS_LEN, stdin);
booklist[numbooks].available = 1;
numbooks++;
printf("添加成功!\n");
}
```