【发布时间】:2017-07-24 06:09:34
【问题描述】:
我在编写用于支付书籍的代码时遇到问题。
如果 ISBN 编号相同,则必须添加数量,但它不会添加数量,而是生成另一个具有相同 ISBN 的值......我不知道如何在现有值中添加数量。我认为问题出在searchinventory 函数或addbook 本身。
#include <stdio.h>
#define MAX_BOOKS 10
#define MAX_TITLE_SIZE 20
struct Book {
int _isbn; //International Standard Book Number
float _price; //Book Price
int _year; // Publication Year
char _title[MAX_TITLE_SIZE]; //Book Title
int _qty; //Book Quantity
};
//////////////////////////////////
void flushKeyboard(void);
void displayInventory(const struct Book book[],const int size);
void addBook(struct Book book[],int *size);
int searchInventory(const struct Book book[],const int isbn,const int size);
void checkPrice(const struct Book book[],const int size);
///////////////////////////////////
void flushKeyboard(void)
{
char enter;
do{
scanf("%c",&enter);
}while(enter != '\n');
}
void displayInventory(const struct Book book[],const int size){
int i = 0;
printf("\n\nInventory\n");
printf("===================================================\n");
printf("ISBN Title Year Price Quantity\n");
printf("---------+-------------------+----+-------+--------\n");
for(i=0;i<size;i++){
printf("%-10.0d%-20s%-5d$%-8.2f%-8d\n",book[i]._isbn,book[i]._title,book[i]._year,book[i]._price,book[i]._qty);
}
printf("===================================================\n\n");
}
//////////////////////////////////////////////
void addBook(struct Book book[],int *size){
int result = -1;
int _isbn;
int _qty;
if(*size == MAX_BOOKS){
printf("the inventory is full");
}
else{
printf("ISBN:");
scanf("%d",&_isbn);
result = searchInventory(&book[*size],_isbn,*size);
printf("_isbn = %d\n",_isbn);
printf("Quantity:");
scanf("%d",&_qty);
if(result != -1){
book[result]._isbn = _isbn;
book[result]._qty = book[result]._qty + _qty;
printf("The book exists in the repository, quantity is updated.\n");
printf("book[result]._qty is %d\n",book[result]._qty);
printf("book[*size]._qty is %d\n",book[*size]._qty);
}
if(result == -1){
book[*size]._isbn = _isbn;
book[*size]._qty = _qty;
printf("Title:");
scanf(" %20[^\n]",book[*size]._title);
flushKeyboard();
printf("Year:");
scanf("%d",&book[*size]._year);
printf("Price:");
scanf("%f",&book[*size]._price);
printf("The book is successfully added to the inventory.\n\n");
}
}
}
//////////////////////////////////////////////////////////////////////////////
int searchInventory(const struct Book book[],const int isbn,const int size){
int i = 0;
int result = -1;
for(i=0;i<size;i++){
if(isbn == (book[i]._isbn)){
result = i;
return result;
break;
}
}
return result;
}
/////////////////////////////////////////////////////////////////////////////
void checkPrice(const struct Book book[],const int size){
int isbn;
int i = 0;
printf("Please input the ISBN number of the book\n\n");
scanf("%d",&isbn);
i = searchInventory(&book[size],isbn,size);
printf("Book %d costs %.2d\n\n",isbn,book[size]._price);
}
int main(void){
struct Book book[MAX_BOOKS];
int size=0;
int option;
printf("Welcome to the Book Store\n=========================\n");
do{
printf("Please select from the following options:\n");
printf("1) Display the inventory.\n");
printf("2) Add a book to the inventory.\n");
printf("3) Check price.\n");
printf("0) Exit.\n");
printf("\nSelect: ");
scanf("%d",&option);
switch(option){
case 1:
if(size == 0){
printf("The inventory is empty!\n");
printf("===================================================\n\n");
}
else{
displayInventory(book,size);
}
break;
case 2:
//SIZE++;
addBook(book,&size);
size++;
break;
case 3:
printf("Please select input the ISBN number of the book: \n\n");
//checkPrice();
break;
case 0:
printf("Goodbye!\n");
break;
default: //wrong input
printf("Invalid input, try again:\n");
break;
}
}while(option!=0);
return 0;
}
【问题讨论】:
-
您的调试工作在哪里?
-
1)
result = searchInventory(&book[*size],_isbn,*size);-->result = searchInventory(book,_isbn,*size); -
2)
printf("book[*size]._qty is %d\n",book[*size]._qty);:book[*size]._qty尚未设置。 -
searchInventory(&book[0],isbn,*size);或 searchInventory(book,isbn,*size);
-
并且,请
size++仅以防万一您添加一本真正的新书,而不仅仅是在现有书的基础上增加数量
标签: c arrays function pointers