C++でいくつかのファイルioを学習しています。私はclass person
と2つの関数write
とread
を作成しました。文字列と浮動小数点を使用したC++ファイルIO
これは、ファイルに正しくwrite
が、私はread
にしたいとread
で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;
}
私は謝罪、もちろんこれはあなたのほとんどに、コードの悪夢のように見える、あなたの助けに感謝します。私はこれが非常に基本的であることを知っている
ありがとうございます!
ところで、 'new'演算子で作成された' person'を削除する必要があります。 – SomeDude
はい、ありがとう!これは単なるおもちゃアプリですが、もちろん重要です。 –