如何在从文件读取时获取特定输出

时间:2014-12-05 20:04:13

标签: c++ fstream

#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数组。

1 个答案:

答案 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[]。不用担心内存分配或名称溢出。

输入可以使用文件和控制台输入,无需更改!