从文件中读取并保存到数组c ++中

时间:2015-04-07 08:24:58

标签: c++ arrays file class object

我正在做这个程序,它将从一个文件读取并将文件中的任何内容存储到一个数组中,它将打印出如下:

产品编号986有8件库存

产品编号432有24件库存

产品编号132有100件库存货物

商品编号123有89件库存

商品编号329有50件商品

商品编号503有30件库存商品

产品编号783有78件库存

产品编号822有32件库存

商品编号233库存有56件商品

商品编号322有74件商品

我不知道为什么我为所有值而不是上面的值获得0。有什么想法吗?

#include <iostream>
#include <fstream>
using namespace std;


// This program defines a class called Inventory that has itemnumber (which 
// contains the id number of a product) and numofitem (which contains the 
// quantity on hand of the corresponding product)as private data members.
// The program will read these values from a file and store them in an 
// array of objects (of type Inventory).  It will then print these values
// to the screen.

// Example: Given the following data file:
//     986 8
//     432 24
// This program reads these values into an array of objects and prints the
// following:
//     Item number 986 has 8 items in stock
//     Item number 432 has 24 items in stock


const int NUMOFPROD = 10;   // This holds the number of products a store sells

class Inventory
{
public:

   void getId(int item);      // This puts item in the private data member 
                              // itemnumber of the object that calls it. 
   void getAmount(int num);   // This puts num in the private data member
                              // numofitem of the object that calls it.
   void display();            // This prints to the screen 
                              // the value of itemnumber and numofitem of the 
                              // object that calls it.
private:

   int  itemNumber;         // This is an id number of the product
   int  numOfItem;          // This is the number of items in stock 

};


int main()
{

   ifstream infile;       // Input file to read values into array
   infile.open("Inventory.dat");

   Inventory products[NUMOFPROD];  // Fill in the code that declares an array of objects of class Inventory
   // called products. The array should be of size NUMOFPROD

   int pos;                   // loop counter
   int id=0;                    // variable holding the id number
   int total=0;                 // variable holding the total for each id number


   for (int pos = 0; pos < NUMOFPROD; pos++){
        infile >> products[pos].getId(id);
        infile >> products[pos].getAmount(total);
   } // Fill in the code that will read inventory numbers and number of items  
   // from a file into the array of objects. There should be calls to both  
   // getId and getAmount member functions somewhere in this code.
   // Example: products[pos].getId(id); will be somewhere in this code

   for (int pos = 0; pos < NUMOFPROD; pos++){
       products[pos].display();
   }// Fill in the code to print out the values (itemNumber and numOfItem) for 
   // each object in the array products.
   // This should be done by calling the member function display within a loop

   return 0;

}

// Write the implementations for all the member functions of the class.
void Inventory::getId(int item){
    itemNumber = item;
}

void Inventory::getAmount(int num){
    numOfItem = num;
}

void Inventory::display(){
    cout << "Item number " << itemNumber << " has " << numOfItem << " items  in stock\n";
}

2 个答案:

答案 0 :(得分:3)

而不是:

infile >> products[pos].getId(id);
infile >> products[pos].getAmount(total);

我相信你想要

infile >> id;
products[pos].getId(id);
infile >> total;
products[pos].getAmount(total);

顺便说一下,将getId重命名为setId的好时机。

答案 1 :(得分:1)

infile >> products[pos].getId(id);

这使用容易混淆的getId函数将值设置为id的值,该值为零。然后它尝试读入该函数的返回值,这应该导致编译错误,因为没有返回值。我不知道为什么你的编译器接受那个代码。

要阅读和设置值,您需要

infile >> id;
products[pos].getId(id);

您可以考虑将该功能重命名为setId,除非您的目标是让代码的读者感到困惑。