gpt4 book ai didi

c++ - 从文本文件读取和创建对象

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:42 25 4
gpt4 key购买 nike

我有休闲功能,但我不明白为什么它不起作用。保存数据后保存正确但读取时,它不读取 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;
}
};

文件:(当我在加载函数中初始化对象时,打印时所有 int 均为 0)

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

最佳答案

当您调用 s = ss.str(); 时,它不会消耗缓冲区,因此下次您尝试提取 int 时,提取失败,因为 ss 缓冲区仍然包含初始字符串(而不仅仅是您在末尾附加的数字的字符串表示形式)。您可以为 int 提取创建一个新的 stringstream 对象,或者在尝试提取 int

之前使用所有内容

关于c++ - 从文本文件读取和创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10775332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com