#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<string.h>
using namespace std;
class Data
{
public:
char name[20];
long long int ph;
Data()
{
strcpy(name," ");
for(int i=0;i<10;i++)
ph=0;
}
void getdata()
{
cin>>name;
cin>>ph;
}
};
int main()
{
int n;
fstream file;
file.open("test1.txt",ios::app|ios::out);
if(!file)
{
cout<<"file open error"<<endl;
return 0;}
cout<<"number of data you want to enter"<<endl;
cin>>n;
char a[1000];
//Data temp;
Data d[n];
for(int i=0;i<n;i++)
{
d[i].getdata();
file<<d[i].name<<" ";
file<<d[i].ph<<endl;
}
file.close();
file.open("test1.txt",ios::in);
file.seekg(0);
file>>a;
while(!file.eof())
{
cout<<a<<endl;
file>>a;
//cout<<a<<endl;
}
cout<<"Enter the index"<<endl;
int in;
cin>>in;
int pos=(in-1)*(sizeof(d[0]));
file.seekg(pos);
file>>a;
//cout<<a<<endl;
file.read((char *)(&d[pos]),sizeof(d[0]));
cout<<a<<endl;
file.close();
system("pause");
return 0;
}
如果我输入以下数据:
要输入的数据数量
2
abc 88
xyz 99
输入索引:
2
xyz 99 //我需要得到这个输出
99 //但是我得到了这个输出
99
此代码不读取该文件中存在的char数组。
答案 0 :(得分:0)
太复杂了,我告诉你一个更简单的解决方案。
class Data
{
public:
Data (const std::string& new_name = "",
long long int new_ph = 0LL)
: name(new_name), ph(new_ph) // Initialization list
{ ; }
friend std::istream& operator>>(std::istream& inp,
Data& d);
friend std::ostream& operator<<(std::ostream& out,
const Data& d);
private:
std::string name;
long long int ph; // I recommend a string for phone numbers
};
std::istream& operator>>(std::istream& inp,
Data& d)
{
inp >> d.name;
inp >> d.ph;
return inp;
}
std::ostream& operator>>(std::ostream& out,
const Data& d)
{
out << d.name << ' ' << d.ph << "\n";
return out;
}
// ...
std::vector<Data> my_vector;
input_file >> quantity;
input_file.ignore(10000, '\n');
Data d;
while (input_file >> d)
{
my_vector.push_back(d);
}
for (unsigned int i = 0; i < my_vector.size(); ++i)
{
cout << my_vector[i];
}
//...
我重载operator>>
以读取Data
项并重载operator<<
以输出Data
项。
看,这个名字没有使用char[]
。不用担心内存分配或名称溢出。
输入可以使用文件和控制台输入,无需更改!