2014-10-30 54 views
0

我創建了一個函數,可以將書籍添加到結構中,但是當我嘗試添加更多書籍時,上一本書將被刪除。我做錯了什麼?將更多數據添加到結構

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(); 
} 
+1

什麼是'B'?你可以創建一個[最小,完整,可驗證的例子](http://stackoverflow.com/help/mcve)? – 2014-10-30 01:22:56

+1

請提供有關該結構以及如何聲明/定義b []數組(?)的更多信息。你可能會考慮傳遞一個指向數組當前b [cnt]元素的指針,並從addBooks()返回一個狀態來表示= 1你有一本書,或者= 0你沒有得到一本書。 – ChuckCottrill 2014-10-30 01:23:30

+0

'scanf(「%s」,&chChoice);':'「%s」' - >''%c「' – BLUEPIXY 2014-10-30 01:30:42

回答

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本身。你也可以聲明cntstatic,如果你這樣做,在調用你的函數之前不要忘記增加cnt。此外,使用%c作爲字符而不是%s

1

每次調用addBooks()時,cnt的值都會被代碼中的第四行重置爲零。將該行替換爲:

static int cnt = 0; 

這將僅在第一次調用addBooks()時將該值設置爲零。

此外,你必須增加CNT的值,然後遞歸調用addBooks()像這樣:

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

我刪除了我的答案,因爲它不完整。爲什麼不更新您的答案以獲得完整的解決方案。 – 2014-10-30 01:44:26