gpt4 book ai didi

c++ - 从文件中检索记录并分配给变量

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:15 31 4
gpt4 key购买 nike

我创建了一个程序,该程序将对象写入文件(通过将其转换为 char),然后从文件中检索记录并将其分配给变量。.

这是我的问题的详细信息:

我有一个 person 类,它有两个成员变量,分别是 name 和 Address。
我通过我的程序创建一个person类对象,然后将它写入文件。
当我取回记录时,我只能取回姓名,但无法取回地址。

这是我的代码:-

我的主课

int _tmain(int argc, _TCHAR* argv[])
{
Person p1;
p1.setName("Jim");
p1.setAddress("USA");
Person p2;


File writeToFile;

writeToFile.writeObject(p1); //write the object to the file using method


fstream readFile("Filet.txt",ios::in); //creates an object of fstream to retrieve records

// declared 2 variable to hold the values
string name;
string address;

//loop until its end of the file
while(!readFile.eof())
{
readFile>>name>>address; //assign the record to the variables
}

p2.setName(name); //initialize the object's members
p2.setAddress(address);


cout<<p2.getName()<<""<< p2.getAddress()<<endl; //print the values
system("pause");

return 0;
}

程序输出如下:

enter image description here

这似乎是什么问题?

谢谢你的时间

编辑:-

我的个人类实现

Person::Person(){}
void Person:: setName(string tname)
{
int length=tname.size();
length=length<5 ? length : 4;
tname.copy(name,length);
name[length]='\0';
}



string Person::getName()
{
return this->name;
}
void Person:: setAddress(string taddress)
{
int length=taddress.size();
length=length<15 ? length:14;
taddress.copy(address,length);
address[length]='\0';
}

string Person:: getAddress()
{
return this->address;
}

我的 writeObject 方法实现

string File:: writeObject (Person obj)
{


fstream writeFile;
writeFile.open("Filet.txt",ios::out |ios::in);

if(!writeFile)
{
cout<<"No File"<<endl;
}

else
{


writeFile.write(reinterpret_cast<const char *>
(&obj),sizeof(Person));

outFile.close();
}
return "Done";

}

最佳答案

输出文件中的“垃圾写入”可能是由于这一行:

writeFile.write(reinterpret_cast<const char *>(&obj),sizeof(Person));

reinterpret_cast 不会自动为您添加空格,这在逻辑上是运算符 >> 文件读取将根据以空格分隔的单词进行工作。

我想说,如果有更好的选择,reinterpret_cast 应该永远是最后的选择。根据您现有的写入功能,我假设您更喜欢以文本模式而不是二进制模式写入文件。

我会简单地使用以下机制:

string out_str = obj.getName() + " " + obj.getAddress() + " ";
writeFile.write(out_str.c_str(), out_str.size());

我个人会逐行而不是逐字逐句地写。此外,如果名称和地址看起来不仅仅是一个单词,您也会遇到问题,因此请注意这一点。

关于c++ - 从文件中检索记录并分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23446933/

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