C 向结构中添加更多数据

C 向结构中添加更多数据,c,C,我创建了一个函数,可以将书籍添加到结构中,但当我尝试添加更多书籍时,上一本书将被删除。我做错了什么 void addBooks(void) { char chChoice; int cnt = 0; printf("\n\t\t~~ADD NEW BOOK\n"); printf("Enter the isbn: "); scanf("%d", &b[cnt].nid); printf("Enter books title: ");

我创建了一个函数,可以将书籍添加到结构中,但当我尝试添加更多书籍时,上一本书将被删除。我做错了什么

void addBooks(void)
{
    char chChoice;
    int cnt = 0;

    printf("\n\t\t~~ADD NEW BOOK\n");

    printf("Enter the isbn: ");
    scanf("%d", &b[cnt].nid);
    printf("Enter books title: ");
    scanf("%s", b[cnt].chTitle);

    printf("The record was saved successfully!");

    printf("Save more books? (Y / N) ");
    scanf("%s", &chChoice);
    if (chChoice == 'y')
    {
        addBooks();
        cnt = cnt + 1;
    }
    else
        mainMenu();
}
您需要
cnt
作为一个参数,否则当
cnt
为本地时,您可以将该值重置为0本身。您还可以将
cnt
声明为
static
,如果这样做,请不要忘记在调用函数之前递增
cnt
。另外,对字符使用
%c
,而不是
%s

每次调用addBooks()时,代码中的第四行将cnt的值重置为零。将该行替换为:

static int cnt = 0;
这将导致仅在第一次调用addBooks()时将该值设置为零

此外,在递归调用addBooks()之前,必须先增加cnt的值,如下所示:


什么是
b
?您能创建一个吗?请提供有关结构以及如何声明/定义b[]数组(?)的更多信息。您可能会考虑将指针传递到数组的当前B[CNT]元素,并从AddioBooScript()返回一个状态,以指示=1,您得到了一本书,或者= 0没有得到一本书。<代码> SCANF(“%s”,CHORY);<代码>:
%s”
-->
%c”
我已经删除了我的答案,因为它不完整。为什么不更新您的答案以获得完整的解决方案。
static int cnt = 0;
if (chChoice == 'y')
{
    cnt = cnt + 1;
    addBooks();
}