C++;带字符串和浮点的文件IO 我正在学习C++中的一些文件IO。我创建了一个类person和两个函数write和read
它将C++;带字符串和浮点的文件IO 我正在学习C++中的一些文件IO。我创建了一个类person和两个函数write和read,c++,file-io,C++,File Io,它将正确写入文件,但当我想读取并用读取初始化个人对象时,它只会在第一次运行时起作用 我认为这与float age变量有关 #include <iostream> #include <fstream> #include <string> #include <sstream> #include <iomanip> using namespace std; class person{ public: person();
正确写入
文件,但当我想读取
并用读取
初始化个人
对象时,它只会在第一次运行时起作用
我认为这与float age
变量有关
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
class person{
public:
person();
person(string, string, float);
string getName();
string getAddress();
float getAge();
void setName(string);
void setAddress(string);
void setAge(float);
~person();
private:
string name, address;
float age;
};
person::person(){
//NOTHING TO DO.
}
person::person(string NAME, string ADD, float AGE)
: name(NAME), address(ADD), age(AGE){
//NOTHING TO DO.
}
string person::getName(){
return name;
}
string person::getAddress(){
return address;
}
float person::getAge(){
return age;
}
void person::setName(string NAME){
name = NAME;
}
void person::setAddress(string ADD){
address = ADD;
}
void person::setAge(float AGE){
age = AGE;
}
void write(person* pA[], int sz){
ofstream myfile("people.txt", ios::trunc);
for(int i = 0; i < sz; i++){
myfile << pA[i]->getName() << endl
<< pA[i]->getAddress() << endl
<< fixed << setprecision(2)
<< pA[i]->getAge() << endl;
}
}
person* read(ifstream & myfile){
person* p = new person();
string name, address;
float age;
getline(myfile, name);
getline(myfile, address);
myfile >> age;
p->setName(name);
p->setAddress(address);
p->setAge(age);
return p;
}
int main() {
person* p0 = new person("Edward Jones", "Los Angeles", 22.2);
person* p1 = new person("Floyd Mayweather", "Las Vegas", 26);
person* p2 = new person("Jane Doe", "Paris", -99);
int sz = 3; //size of array.
person* pA[3];
pA[0] = p0;
pA[1] = p1;
pA[2] = p2;
write(pA,sz);
person* newP0;
person* newP1;
person* newP2;
ifstream myfile("people.txt");
newP0 = read(myfile);
newP1 = read(myfile);
newP2 = read(myfile);
myfile.close();
cout
<< newP0->getName() << endl << newP0->getAddress() << endl << newP0->getAge()
<< newP1->getName() << endl << newP1->getAddress() << endl << newP1->getAge()
<< newP2->getName() << endl << newP2->getAddress() << endl << newP2->getAge();
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
班主任{
公众:
人();
人(弦、弦、浮);
字符串getName();
字符串getAddress();
float getAge();
void setName(字符串);
无效设置地址(字符串);
空隙设置(浮动);
~person();
私人:
字符串名称、地址;
浮动年龄;
};
person::person(){
//无事可做。
}
person::person(字符串名称、字符串添加、浮动年龄)
:姓名、地址、年龄{
//无事可做。
}
字符串person::getName(){
返回名称;
}
字符串person::getAddress(){
回信地址;
}
float person::getAge(){
回归年龄;
}
void person::setName(字符串名称){
名称=名称;
}
void person::setAddress(字符串添加){
地址=添加;
}
无效人员::设置年龄(浮动年龄){
年龄=年龄;
}
无效写入(个人*pA[],内部sz){
流myfile(“people.txt”,ios::trunc);
对于(int i=0;i getName()因为此代码将Person
的每个成员作为单独的一行写入,所以它也应该将其作为行读回
而不是:
myfile >> age;
做:
在
pA[2]=p2
写入了破坏堆栈的数组。顺便说一句,您需要删除由新的操作员创建的个人s。是的,谢谢!这只是一个玩具应用程序,但这当然很重要。哦,我使用了myfile>>age
因为我认为否则它不会保存浮点“格式”。我会尝试的!对arr也很抱歉是的,我又增加了一个人来看看发生了什么,显然没有对它进行测试。它起作用了。谢谢!添加了删除并调整了数组的大小以使其起作用。我感谢你的帮助。@DanielSegura你可能想使用std::vector
来避免手动内存管理。我会研究一下的。再次感谢,我被困在那里了。
string age_str;
getline(myfile, age_str);
std::istringstream(age_str) >> age;
person* pA[2];
pA[0] = p0;
pA[1] = p1;
pA[2] = p2;