我创建了一个可以将书籍添加到结构中的功能,但是当我尝试添加更多书籍时,会删除之前的书籍。我做错了什么?
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();
}
答案 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();
}