向结构添加更多数据

时间:2014-10-30 01:20:24

标签: 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: ");
    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();
}

2 个答案:

答案 0 :(得分:1)

void addBooks(int cnt) //parameter
{
    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(" %c", &chChoice);
    if (chChoice == 'y')
    {
        addBooks(cnt+1);
    }
    else
        mainMenu();
}

您需要cnt作为参数,因为cnt是本地的,您将值重置为0本身。您也可以将cnt声明为static,如果您这样做,请不要在调用函数前忘记递增cnt。另外,对{0}使用%c而不是%s

答案 1 :(得分:1)

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

static int cnt = 0;

这将导致仅在第一次调用addBooks()时将值设置为零。

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

if (chChoice == 'y')
{
    cnt = cnt + 1;
    addBooks();
}