2

私は次の機能を持っていますが、なぜ機能しないのかわかりません。データを保存した後は正しく保存されますが、読み取るときに int 部分が読み取られません。

void StudentRepository::loadStudents(){
    ifstream fl;
    fl.open("studs.txt");
    Student st("",0,0);
    string str,s;
    stringstream ss;
    int i;
    int loc;
    if(fl.is_open()){
        while(!(fl.eof())){
            getline(fl,str);
            loc = str.find(",");
            ss << str.substr(0,loc);
            s = ss.str();
            st.setName(s);
            str.erase(0,loc);
            loc = str.find(",");
            ss << str.substr(0,loc);
            ss >> i;
            st.setId(i);
            str.erase(0,loc);
            ss >> i;
            st.setGroup(i);
            students.push_back(st);

        }
    }
    else{
        cout<<"~~~ File couldn't be open! ~~~"<<endl;
    }
    fl.close();
}

編集:

class Student {
private:
    string name;
    int ID;
    int group;



public:
Student(string name, int id, int gr ):name(name),ID(id),group(gr){}

void setId(int value)       {group = value;}
void setGroup(int value)    {ID = value;}
void setName(string value)  {name = value;}
int getGroup()              const{return group;}
int getID()              const{return ID;}
    string getName()            const{return name;}

    friend ostream& operator << (ostream& out, const Student& student)
    {
        out << student.name << " " << student.ID << " " << student.group <<endl;
        return out;
    }
};

file:(ロード関数でオブジェクトを初期化するため、印刷時にすべての int が 0 になります)

maier tsdar,2,0
staedfsgu aldasn,0,3
pdasdp aasdela,323,23
marsdaciu baleen,234,4534
madsd,234,2345
4

1 に答える 1

3

を呼び出している場合s = ss.str();、バッファは消費されないため、次に を抽出しようとすると、バッファにはまだ最初の文字列が含まれているため (最後に追加した数値の文字列表現だけでなくint)、抽出は失敗します。 ss. 抽出用に新しい stringstream オブジェクトを作成するか、またはsintを抽出する前にすべてのコンテンツを消費することができます。int

于 2012-05-27T16:08:39.610 に答える