2017-04-30 64 views
-2

你好我試圖做一個簡單的圖書館服務計劃C++類變量整數拿到

類代碼

class bookEntry { 
public: 
int copies; 
char name[30]; 
char author[30]; 
}; 

class library { 
public: 
bookEntry database[50]; 
int numBooks = 0; 

void insertBook (char bookName[], char author[], int c); // Add 
void deleteBook (char bookName[]); // Delete 
//bookEntry *search(char bookName[]); // Not worked yet 
void print(void);  // Print_List 
}; 

主代碼不同的值

void library::insertBook(char bookName[], char author[], int c) { // AddBook 
int i, j; 
cout << bookName << author << c; 
for (i = 0; i < numBooks+1; i++) { 
    string a = (database[i].name);  // Compare Book Title 
    if ((a.compare(bookName)) == 0) {   // If it's same 
     database[i].copies += c;    // add to copies and pass 
     break; 
    } 
    else { 
     database[numBooks].copies = c; 
     strcpy(database[numBooks].name, bookName);  // Add New Book 
     strcpy(database[numBooks].author, author); 
    } 
} 
numBooks += 1; 
} 

void library::print(void) {      // Print Books 
cout << "BookName  Author  Copies" << endl; 
for (int i = 0; i <= numBooks; i++) { 
    cout << database[i].name << " " << database[i].author << " " << database[i].copies << endl; 
    } 
} 

Numbooks =總計數的不同圖書的種類

我得到的結果正確的第一個值o n數組bookEntry。 但是當我把另一個值,數字(copies)得到不同的數字,然後我插入。另外,當我把價值,我插入之前,工作得很好。 LIKE Result

爲什麼會發生這種情況?我把變量錯了嗎?

來源:Main_File

+0

'numBooks'應該是不同書的數量,還是書的所有副本的總數? –

+0

您需要使用調試器遍歷代碼,並觀察插入代碼處理第二本書時會發生什麼。 –

+0

@PhilM這是用於不同類型圖書的總計數 – Gomtting

回答

1

逐步執行代碼應與調試器應該告訴你這一點:

如果每本書匹配您要添加,然後之一,迭代要檢查比較失敗,請更新新輸入的圖書的名稱和副本。

這意味着,你比較第一本書,它失敗了,所以你添加第二本書。然後,您將與(新增加的)第二本書進行比較,查看它是否匹配,然後再次更新副本數量。顯示第二本書的副本數量恰好是您輸入數量的兩倍。

您需要做的是檢查每個現有的副本,然後,只有在所有現有書籍已被選中並且沒有找到該書籍之後,才添加新副本。