我正在学习 C++ 中的一些文件 io。我创建了一个class person
和两个函数write
和read
。
它write
正确地进入文件,但是当我想用它read
初始化person
对象时,read
它只能在第一次运行时工作。
我认为这与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;
}
感谢您的帮助,当然这对你们大多数人来说看起来像是一场代码噩梦,我深表歉意。我知道这是非常基本的。
谢谢!
由于此代码将 的每个成员Person
作为单独的行写入,因此也应将其作为行读回。
代替:
myfile >> age;
做:
string age_str;
getline(myfile, age_str);
std::istringstream(age_str) >> age;
在
person* pA[2];
pA[0] = p0;
pA[1] = p1;
pA[2] = p2;
pA[2] = p2
写入破坏堆栈的数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句