C++에서 일부 파일 io를 배우고 있습니다. 나는 class person
과 두 개의 함수 write
과 read
을 만들었습니다.문자열 및 부동 소수점을 사용하는 C++ 파일 IO
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;
}
여러분의 도움에 감사 드리며, 물론 이것은 대부분의 사람들에게 코드 악몽처럼 보입니다. 사과드립니다. 나는 이것이 아주 기본적인 것임을 압니다.
감사합니다.
BTW'new' 연산자로 생성 된'person'을 삭제해야합니다. – SomeDude
네, 고마워요! 이것은 장난감 응용 프로그램이지만 물론 중요합니다. –