我正在编写代码、构建和运行该程序,但出现了以下错误消息:
'MAX_BOOK_NAME' undeclared (first use in this function)
我面临的另一个问题是程序需要并实现以下内容:您必须使用以下结构来存储有关一本书的信息:
struct book {
char *title;
char *author;
char *subject;
};必须使用以下结构存储有关库集合的信息:
struct library {
struct book collection;
int num_books;
struct library *next;
};唯一需要编写的函数是复制函数,它将一本书的内容复制到另一本书中。下面是该函数的原型:
void copybook(struct book* dest, struct book* source);虽然没有给出其他的函数原型,但是您应该遵循良好的编程设计,并创建几个与解决此问题相关的指定任务的函数。一定要非常小心的参数传递。特别是,在每个需要类型为struct库的变量的函数中,请确保通过引用传递该变量,如下所示:
void addBook(struct library* thislib);这将确保对函数中的库所做的任何更改都反映在main中。在像这样的函数中,记住要访问任何一个组件,使用以下表达式:
thislib->collection
thislib->num_books每当您将书添加到集合中时,请确保将其添加到集合的末尾。不要忘记更新结构库变量中的变量num_books。每当你从藏书中删除一本书时,一定要把书在第二位--最后一个位置--复制到空出的位置。例如,如果要删除的书位于第3位,而删除前藏书的数量为7,则应将位置6 (第二个--最后一个填充位置)中的书移到索引3中的书中。随后,图书馆中的图书数量应更新为只保存6本。
下面是我迄今为止所做的,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void viewBooks()
{
int found = 0;
char bookName[MAX_BOOK_NAME] = {0};
{
s_BooksInfo_addBookInfoInDataBase = {0};
FILE *fp = NULL;
int status = 0;
unsigned int countBook = 1;
headMessage("VIEW BOOKS DETAILS");
fp = fopen(FILE_NAME,"rb");
if(fp == NULL)
{
printf("File is not opened\n");
exit(1);
}
if (fseek(fp,FILE_HEADER_SIZE,SEEK_SET) != 0)
{
fclose(fp);
printf("Facing issue while reading file\n");
exit(1);
}
while (fread (&addBookInfoInDataBase, sizeof(addBookInfoInDataBase), 1, fp))
{
printf("\n\t\t\tBook Count = %d\n\n",countBook);
printf("\t\t\tBook id = %u",addBookInfoInDataBase.books_id);
printf("\n\t\t\tBook name = %s",addBookInfoInDataBase.bookName);
printf("\t\t\tBook authorName = %s",addBookInfoInDataBase.authorName);
printf("\t\t\tBook issue date(day/month/year) = (%d/%d/%d)",addBookInfoInDataBase.bookIssueDate.dd,
addBookInfoInDataBase.bookIssueDate.mm, addBookInfoInDataBase.bookIssueDate.yyyy);
found = 1;
++countBook;
}
fclose(fp);
if(!found)
{
printf("\n\t\t\tNo Record");
}
printf("\n\n\t\t\tPress any key to go to main menu.....");
fflush(stdin);
getchar();
}
return 0;
}发布于 2021-12-22 08:03:52
在您向我们展示的当前.c文件中,没有定义MAX_BOOK_NAME。为了做到这一点,您必须添加代码的对开行,在#include行下面,但在任何函数之外,因为您希望它在整个文件中是可见的:
#define MAX_BOOK_NAME the_number_you_want
发布于 2021-12-22 10:59:03
问题是,bookName数组的大小是不确定的,因为它是一个常量,或者需要在预处理程序指令之后声明,比如在主函数中,
#define MAX_BOOK_NAME = 10; //The number is given just for example或
const int MAX_BOOK_NAME = 10; //The number is given just for example 发布于 2021-12-22 11:11:35
名为MAX_BOOK_NAME的常量未在您与我们共享的整个代码中定义。我想你应该试着在使用之前定义常量。试着放:
#define MAX_BOOK_NAME 10// or any number you need
void viewBooks()
{
int found = 0;
char bookName[MAX_BOOK_NAME] = {0};
{或
const int MAX_BOOK_NAME=10//or any number you wish
void viewBooks()
{
int found = 0;
char bookName[MAX_BOOK_NAME] = {0};
{如果您的愿望是创建一个动态数组,那么您可以尝试此链接
如果你的问题只是没有定义常数,那么你已经从其他人那里得到了很多答案。
https://stackoverflow.com/questions/70445788
复制相似问题