C++ C++;类变量Integer获得了不同的值

C++ C++;类变量Integer获得了不同的值,c++,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

嗨,我想做一个简单的图书馆服务项目

类别代码

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;
    }
}
void库::insertBook(char bookName[],char author[],int c){//AddBook
int i,j;

cout单步执行代码时,调试器应向您显示以下内容:

检查每本书是否与要添加的书匹配,然后,对于比较失败的每一次迭代,更新新输入的书的名称和副本

这意味着,与第一本书进行比较失败,因此添加第二本书。然后,与(新添加的)第二本书进行比较,查看是否匹配,然后再次更新副本数。这是因为第二本书显示的副本数正好是您输入的副本数的两倍


你需要做的是检查每一本现有的书,然后,只有在所有现有的书都被检查过,并且没有找到书之后,才添加新的一本。

numBooks
应该是不同的书的数量,还是书的所有副本的总数?你需要用调试器逐步检查代码,然后观察接下来会发生什么insert代码处理第二本书。@Phillm这是针对不同类型书籍的总计数books@PhilM我观看了插入第二本书和更多内容的结果。如果你检查结果图像(链接),这就是我得到的结果。数字没有很好地进入数组。你是否检查了第二本书的整个函数?循环的每个迭代?