简体   繁体   中英

Read from file and save into array c++

I'm doing this program that will read from a file and store whatever is on the file to an array and the it will print that like this:

Item number 986 has 8 items in stock

Item number 432 has 24 items in stock

Item number 132 has 100 items in stock

Item number 123 has 89 items in stock

Item number 329 has 50 items in stock

Item number 503 has 30 items in stock

Item number 783 has 78 items in stock

Item number 822 has 32 items in stock

Item number 233 has 56 items in stock

Item number 322 has 74 items in stock

I don't know why I am getting 0s for all values instead of those values above. Any ideas?

#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";
}

Instead of this:

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

I believe you want

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

Good time to rename getId to setId by the way.

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

This uses the confusingly named getId function to set the value to that of id , which is zero. It then attempts to read into the return value of that function, which should cause a compile error since there is no return value. I've no idea why your compiler accepts that code.

To read and set the value, you want

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

You might consider renaming the function to something like setId , unless your goal is to confuse readers of the code.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM