首页 > 解决方案 > C++:将数据保存在并行数组中

问题描述

我是 C++ 新手,我在使用并行数组时遇到了一些麻烦。在我为家庭作业编写的这个函数中,我们将创建一个基于菜单的输入来输入书籍数据。图书数据将存储在各种并行数组中,即一个用于标题,一个用于 ISBN,一个用于作者等。

我的问题是,在这个 do-while 循环结束时,用户刚刚输入的数据将被保存到数组的下一个条目中。但它似乎只是覆盖了最后一个条目(或者它只写入数组的最后一个条目,我不确定)。我在数组中使用循环 cout 语句进行测试,我得到的只是最后一个条目......任何正确方向的指针都会很棒,谢谢!

抱歉,如果格式在代码上被破坏,这也是我第一次在 stackoverflow 上发帖。

void addBook (string bookTitle [], string isbn [], string author [], string publisher [], string dateAdded [], int qtyOnHand [], double wholesale [], double retail [], int& bookCount)

{
int userChoice = -1;
int pos = 0;
int len = 30;

string tempBookTitle = "EMPTY";
string tempISBN = "EMPTY";
string tempAuthor = "EMPTY";
string tempPublisher = "EMPTY";
string tempDateAdded = "EMPTY";
int tempQtyOnHand = 0;
double tempWholesale = 0;
double tempRetail = 0;

int bookIndex = 0;

do
(  {
system ("CLS");

cout << "******************************************************************************" << endl
     << "*                          SERENDIPITY BOOKSELLERS                           *" << endl
     << "*                                 ADD BOOK                                   *" << endl
     << "*                   DATABASE SIZE: " << setw (8) << DBSIZE << "CURRENT BOOK COUNT: " << setw (8) << bookCount << "      *" << endl
     << "*                                                                            *" << endl
     << "*                                                --PENDING VALUES--          *" << endl
     << "*                                                                            *" << endl
     << "*  <1> Enter Book Title              >  " << setw (37) << tempBookTitle.substr (pos, len) << "*" << endl
     << "*  <2> Enter ISBN                    >  " << setw (37) << tempISBN << "*" << endl
     << "*  <3> Enter Author                  >  " << setw (37) << tempAuthor << "*" << endl
     << "*  <4> Enter Publisher               >  " << setw (37) << tempPublisher << "*" << endl
     << "*  <5> Enter Date Added (MM/DD/YYYY) >  " << setw (37) << tempDateAdded << "*" << endl
     << "*  <6> Enter Quantity on Hand        >  " << setw (37) << tempQtyOnHand << "*" << endl
     << "*  <7> Enter Wholesale Price         >  " << setw (37) << tempWholesale << "*" << endl
     << "*  <8> Enter Retail Price            >  " << setw (37) << tempRetail << "*" << endl
     << "*  <9> Save Book to Database                                                 *" << endl
     << "*  <0> Return to Inventory Menu                                              *" << endl
     << "*                                                                            *" << endl
     << "******************************************************************************" << endl
     << "                                CHOICE (0-9): ";
)

cin >> userChoice;

while (cin.fail () || userChoice < 0 || userChoice > 9)
{
  cout << "Please input correct OPTION: ";
  cin.clear ();
  cin.ignore ();
  cin >> userChoice;
}

cout << endl;

switch (userChoice)
{
  case 1:
    cout << "Enter Book Title: ";
    cin.ignore ();
    getline (cin, tempBookTitle);
    break;
  case 2:
    cout << "Enter ISBN: ";
    cin.ignore ();
    getline (cin, tempISBN, '\n');
    break;
  case 3:
    cout << "Enter Author: ";
    cin.ignore ();
    getline (cin, tempAuthor, '\n');
    break;
  case 4:
    cout << "Enter Publisher: ";
    cin.ignore ();
    getline (cin, tempPublisher, '\n');
    break;
  case 5:
    cout << "Enter Date Added (MM/DD/YYYY): ";
    cin.ignore ();
    getline (cin, tempDateAdded, '\n');
    break;
  case 6:
    cout << "Enter Quantity-on-Hand: ";
    cin >> tempQtyOnHand;
    break;
  case 7:
    cout << "Enter Wholesale Price: ";
    cin >> tempWholesale;
    break;
  case 8:
    cout << "Enter Retail Price: ";
    cin >> tempRetail;
    break;

  //THIS IS MY PROBLEM CASE HERE// 
  case 9:
    bookTitle [bookIndex] = tempBookTitle;
    isbn [bookIndex] = tempISBN;
    author [bookIndex] = tempAuthor;
    publisher [bookIndex] = tempPublisher;
    dateAdded [bookIndex] = tempDateAdded;
    qtyOnHand [bookIndex] = tempQtyOnHand;
    wholesale [bookIndex] = tempWholesale;
    retail [bookIndex] = tempRetail;
    bookCount++;
    bookIndex++;
    break;
 }

}
while (userChoice != 0);
{
  return;
}
}

标签: c++

解决方案


上面的代码无法编译,但很清楚问题出在哪里

void addBook (string bookTitle [], ... , int& bookCount)
{
    ...
    int bookIndex = 0;
    ... 
    case 9:
        bookTitle [bookIndex] = tempBookTitle;
        ...
        bookCount++;
        bookIndex++;
        break;

bookIndex即使您bookCount大于零,您也总是从零开始。只需放下bookIndexbookCount始终使用。

void addBook (string bookTitle [], ... , int& bookCount)
{
    ...
    case 9:
        bookTitle [bookCount] = tempBookTitle;
        ...
        bookCount++;
        break;

推荐阅读