【问题标题】:Read from file and save into array c++从文件中读取并保存到数组 C++
【发布时间】:2015-04-07 08:24:57
【问题描述】:

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

货品编号 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";
}

【问题讨论】:

  • 什么是infile &gt;&gt; products[pos].getId(id); infile &gt;&gt; products[pos].getAmount(total); doig? getid 返回void
  • infile &gt;&gt; products[pos].getId(id); 不应该从文件读取到数组吗?
  • 它甚至可以编译吗?您可以尝试 Mike 或我建议的解决方案。

标签: c++ arrays file class object


【解决方案1】:

而不是这个:

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

我相信你想要

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

顺便把getId 重命名为setId 的好时机。

【讨论】:

    【解决方案2】:
    infile >> products[pos].getId(id);
    

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

    要读取和设置值,您需要

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

    您可以考虑将函数重命名为 setId 之类的名称,除非您的目标是让代码的读者感到困惑。

    【讨论】: