Reputation: 89
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";
}
Upvotes: 0
Views: 1289
Reputation: 254461
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.
Upvotes: 1
Reputation: 30489
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.
Upvotes: 3