C++ c++;将结构推送到向量上然后保存到输出文件的问题
我放弃了向量的概念,经过一段相当长的摸索之后,我成功地将结构放入和取出了一个文件。我真的很喜欢C++的挑战,太多了!!!p>C++ c++;将结构推送到向量上然后保存到输出文件的问题,c++,struct,ofstream,static-cast,C++,Struct,Ofstream,Static Cast,我放弃了向量的概念,经过一段相当长的摸索之后,我成功地将结构放入和取出了一个文件。我真的很喜欢C++的挑战,太多了!!!p> #include <iostream> #include <fstream> #include <vector> using namespace std; struct Account_query { public: char name[50]; char number[50]; }; void AddRecord(
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct Account_query
{
public:
char name[50];
char number[50];
};
void AddRecord(Account_query* aq)
{
ofstream fout;
fout.open("Records.out", ios::app | ios::out | ios::binary);
cout << "Enter name: ";
cin >> aq->name;
cout << "Enter account number: ";
cin >> aq->number;
fout.write( reinterpret_cast<const char *>( &(*aq) ), sizeof(Account_query) );
fout.close();
}
void ShowRecord()
{
Account_query aq;
//std::memset(&aq, 0, sizeof(aq));
ifstream inf;
inf.open("Records.out", ios::binary);
if(!inf)
{
cout << "Problem opening"<<endl;
}
cout <<"####Data Out###"<<endl;
while(!inf.eof())
{
inf.read( reinterpret_cast<char *>(&aq.name), sizeof(Account_query::name));
inf.read( reinterpret_cast<char *>(&aq.number), sizeof(Account_query::number));
cout << "Name is: " << aq.name << "Account is: " << aq.number <<endl;
}
}
int main(int argc, const char * argv[]) {
vector<Account_query> list;
cout << "Welcome to Jizz Bank\n";
cout << "Enter one of the following options then press enter\n";
cout << "-----------------------------------\n";
cout << "1) Add Record \n";
cout << "2) Show Records \n";
cout << "3) Search Record \n";
cout << "4) Edit Record \n";
cout << "5) Delete Record \n";
cout << "-----------------------------------\n";
cout << "Enter your choice: ";
int x;
cin >>x;
Account_query a;
Account_query *p = &a;
switch(x)
{
case 1:{
AddRecord(p);//got the data for object now
break;
}
case 2:{
ShowRecord();
break;
}
default:{
exit(0);
}
}
return 0;
}
#包括
#包括
#包括
使用名称空间std;
结构帐户查询
{
公众:
字符名[50];
字符数[50];
};
作废添加记录(账户查询*aq)
{
流式流量计;
fout.open(“Records.out”,ios::app | ios::out | ios::binary);
cout>aq->name;
cout>aq->number;
fout.write(重新解释转换(&(*aq)),sizeof(账户查询));
fout.close();
}
void ShowRecord()
{
账户查询aq;
//std::memset(&aq,0,sizeof(aq));
ifstream-inf;
inf.open(“Records.out”,ios::binary);
如果(!inf)
{
不要让自己的生活变得困难。首先使用std::string
,然后使用操作符将字符串放入文件中(并从中读取)。例如。/p
pre class=“lang cpp prettyprint override”代码#包含字符串
#包括iostream
#包括fstream
结构AccountQuery
{
std::字符串名;
std::字符串编号;
};
AccountQuery AddRecord()
{
AccountQuery-aq;
标准::cout<“输入名称:”;
标准::cin aq.name;
std::cout<“输入账号:”;
标准:cin>aq.number;
{
std::of stream fout(“Records.out”,std::ios::app | std::ios::binary);
在将原始数据写入文件时,write
函数需要指向要写入数据的第一个字节的指针。*它
是一个帐户查询对象,而不是指针。关于指针,以及如何获取指向对象的指针,您读过哪些内容?vector::iterator
我想您使用的是一本非常古老的书或教程你的来源是什么?还有另一个问题,它也与指针有关…这个问题可以通过不使用指针来解决。
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct Account_query
{
public:
char name[50];
char number[50];
};
void AddRecord(Account_query* aq, vector<Account_query>& list)
{
ofstream fout;
fout.open("Records.bank", ios::binary | ios::out);
cout << "Enter name: ";
cin >> aq->name;
cout << "Enter account number: ";
cin >> aq->number;
list.push_back(*aq);
for (vector<Account_query>::iterator it=list.begin(); it != list.end(); ++it)
{
fout.write(static_cast<char*> (*it), sizeof(Account_query));
}
fout.close();
}
void ShowRecord()
{
//TODO
}
int main(int argc, const char * argv[]) {
vector<Account_query> list;
cout << "Welcome to Jizz Bank\n";
cout << "Enter one of the following options then press enter\n";
cout << "-----------------------------------\n";
cout << "1) Add Record \n";
cout << "2) Show Records \n";
cout << "3) Search Record \n";
cout << "4) Edit Record \n";
cout << "5) Delete Record \n";
cout << "-----------------------------------\n";
cout << "Enter your choice: ";
int x;
cin >>x;
switch(x)
{
case 1:{
Account_query* a = new Account_query;
AddRecord(a, list);//got the data for object now
break;
}
case 2:{
cout<<"do nowt yet"<<endl;
break;
}
default:{
exit(0);
}
}
return 0;
}