首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于声明字符未声明的问题(在此函数中首次使用)

关于声明字符未声明的问题(在此函数中首次使用)
EN

Stack Overflow用户
提问于 2021-12-22 07:52:47
回答 3查看 216关注 0票数 1

我正在编写代码、构建和运行该程序,但出现了以下错误消息:

'MAX_BOOK_NAME' undeclared (first use in this function)

我面临的另一个问题是程序需要并实现以下内容:您必须使用以下结构来存储有关一本书的信息:

代码语言:javascript
复制
struct book {
char *title;
char *author;
char *subject;
};

必须使用以下结构存储有关库集合的信息:

代码语言:javascript
复制
struct library {
struct book collection;
int num_books;
struct library *next;
};

唯一需要编写的函数是复制函数,它将一本书的内容复制到另一本书中。下面是该函数的原型:

代码语言:javascript
复制
void copybook(struct book* dest, struct book* source);

虽然没有给出其他的函数原型,但是您应该遵循良好的编程设计,并创建几个与解决此问题相关的指定任务的函数。一定要非常小心的参数传递。特别是,在每个需要类型为struct库的变量的函数中,请确保通过引用传递该变量,如下所示:

代码语言:javascript
复制
void addBook(struct library* thislib);

这将确保对函数中的库所做的任何更改都反映在main中。在像这样的函数中,记住要访问任何一个组件,使用以下表达式:

代码语言:javascript
复制
thislib->collection
thislib->num_books

每当您将书添加到集合中时,请确保将其添加到集合的末尾。不要忘记更新结构库变量中的变量num_books。每当你从藏书中删除一本书时,一定要把书在第二位--最后一个位置--复制到空出的位置。例如,如果要删除的书位于第3位,而删除前藏书的数量为7,则应将位置6 (第二个--最后一个填充位置)中的书移到索引3中的书中。随后,图书馆中的图书数量应更新为只保存6本。

下面是我迄今为止所做的,

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

发布于 2021-12-22 08:03:52

在您向我们展示的当前.c文件中,没有定义MAX_BOOK_NAME。为了做到这一点,您必须添加代码的对开行,在#include行下面,但在任何函数之外,因为您希望它在整个文件中是可见的:

#define MAX_BOOK_NAME the_number_you_want

票数 2
EN

Stack Overflow用户

发布于 2021-12-22 10:59:03

问题是,bookName数组的大小是不确定的,因为它是一个常量,或者需要在预处理程序指令之后声明,比如在主函数中,

代码语言:javascript
复制
#define MAX_BOOK_NAME = 10; //The number is given just for example

代码语言:javascript
复制
const int MAX_BOOK_NAME = 10; //The number is given just for example   
票数 0
EN

Stack Overflow用户

发布于 2021-12-22 11:11:35

名为MAX_BOOK_NAME的常量未在您与我们共享的整个代码中定义。我想你应该试着在使用之前定义常量。试着放:

代码语言:javascript
复制
#define MAX_BOOK_NAME 10// or any number you need
void viewBooks()
{
    int found = 0;

    char bookName[MAX_BOOK_NAME] = {0};

{

代码语言:javascript
复制
const int MAX_BOOK_NAME=10//or any number you wish
void viewBooks()
{
    int found = 0;

    char bookName[MAX_BOOK_NAME] = {0};

{

如果您的愿望是创建一个动态数组,那么您可以尝试此链接

如果你的问题只是没有定义常数,那么你已经从其他人那里得到了很多答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70445788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档