您好我正在尝试制作一个简单的图书馆服务计划
班级代码
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
=不同类型图书的总计数
我的结果在bookEntry
数组的第一个值上得到了正确的结果。
但是当我输入另一个值时,数字(copies
)得到的数字不同,然后插入。此外,当我推出之前插入的值时,确实运行良好。
喜欢
Result
为什么会这样?我把变量写错了吗?
来源:Main_File
答案 0 :(得分:1)
调试器应该逐步调试代码:
您正在检查每本书是否与您要添加的书匹配,然后,对于每次迭代,比较失败,更新新输入的书籍的名称和副本。
这意味着,您与第一本书进行比较,它会失败,因此您添加第二本书。然后,您与(新添加的)第二本书进行比较,看它是否匹配,并再次更新副本数。第二本书显示的副本数量恰好是您输入的数字的两倍。
您需要做的是检查每个现有副本,然后,只有在检查完所有现有图书并找不到图书后,才添加新图书。