1
//Student file
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;

#include "student.h"
#define cap 100
void main()
{       string s;
    class student student[cap],l;
    int i;
    fstream f;

    i=0;
    cout << "Enter the file name: ";    //Display to enter the file name
    cin >>s;


    f.open(s.data(),ios::in);
    if(!f.is_open()) 
        cout << "could not open file";
    while(i<cap && !f.eof())
    {       cout << "good";
        student[i].get(f);

//Display if okay
        if(f.good())
        {
            i++;
            student[i].put(cout);
            cout << i;
        }
    }
        f.close();

}
class student
{
    public:
        student(); //Constructor without parameters
        student(int,string,string,int,float); //Constructor with parameters
        ~student(); //Deconstructors
        bool get(istream &);    //Input
        void put(ostream &);    //Output
        int read_array(string,int);
    private:
        int id,age;
        float gpa;
        string last,first;
};

student::student()
{
    id = 0;
    first = "null";
    last = "null";
    age = 0;
    gpa = 0.0;
}
bool student::get(istream &in)
{

    in >> id >> first >> last >> age >> gpa;
    return(in.good());
}
void student::put(ostream &out)
{
    out << id << first << last << age << gpa;
}

これを実行すると、コンストラクターの値が何度も表示され、ファイルからのデータが配列に入って表示されます。データをクラス配列に正しく配置する正しい方法を行っているかどうかはわかりません。

4

1 に答える 1

1

ここに 1 つの問題があります。

if (f.good())
{
  // student[i] has just been read from the file.
  i++;                   // Increment counter.
  student[i].put(cout);  // Print whatever was in the next element.
  cout << i;
}

カウンターは最初にインクリメントされるため、更新されたばかりの要素の次student[i]の要素を参照します。

于 2012-05-01T02:11:13.933 に答える