2015-04-07 1 views
0

Я делаю эту программу, которая будет считывать из файла и хранить все, что находится на файл в массив и он будет печатать, что, как это:Чтение из файла и сохранить в массив C++

номер товара 986 имеет 8 на складе

номер позиции 432 имеет 24 детали в штоке

номер позиции 132 имеет 100 элементов на складе

номер позиции 123 имеет 89 элементов в наличии

Номер позиции 329 имеет 50 элементов в наличии

Номер позиции 503 имеет 30 детали в штоке

Номер позиции 783 имеет 78 детали в штоке

Номер позиции 822 имеет 32 детали в штоке

Item число 233 имеет 56 единиц на складе

Пункт номер 322 имеет 74 пунктов в наличии

Я не знаю, почему я получить ting 0s для всех значений вместо указанных выше значений. Есть идеи?

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

Что такое 'infile >> products [pos] .getId (id); infile >> продукты [pos] .getAmount (всего); 'doig? 'getid' возвращает' void' –

+0

'infile >> products [pos] .getId (id);' suppost для чтения из файла в массив не является? – Meeeeee

+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
infile >> products[pos].getId(id); 

Это использует смешения с именем getId функцию, чтобы установить значение у id, который равен нулю. Затем он пытается прочитать возвращаемое значение этой функции, что должно вызвать ошибку компиляции, поскольку нет возвращаемого значения. Я не знаю, почему ваш компилятор принимает этот код.

Для чтения и установите значение, вы хотите

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

Вы могли бы рассмотреть вопрос о переименовании функции на что-то вроде setId, если ваша цель не запутать читателей кода.

Смежные вопросы