C ++读取字符串int,从文本文件浮动到数组/字符串

时间:2015-03-05 20:41:55

标签: c++ arrays string file-io

我的.txt文件包含以下内容

12345
John Smith
45 12.50
54234
Joe Paul
32 10.25
12324
Chris Lee
43 22.50

第一个int是员工ID,然后是字符串名称,然后是小时和工资率(浮动)。

我的计划:

using namespace std;

const int Size = 10;

typedef int intarray[Size];
typedef float farray[Size];
typedef string starray[Size];

void  readdata(intarray,starray,intarray,farray, ifstream &);
void  print(intarray,starray,intarray,farray,ifstream &);

int main()
{
    ifstream fin("data.txt");
    //ofstream fout;

    starray EmployeeName;
    intarray EmployeeID,EmployeeHoursWorked;
farray EmployeeRate;

readdata(EmployeeID,EmployeeName,EmployeeHoursWorked,EmployeeRate,fin);
print(EmployeeID,EmployeeName,EmployeeHoursWorked,EmployeeRate,fin);
cin.get();
cin.ignore();
}

我的功能,我的代码没有正确读取文件。

void readdata(intarray ID, starray Name, intarray Hours, farray Rate,    ifstream & infile)
{
for(int i = 0; i < Size; i++)
  {
//this code is not working as intended
   infile >> ID[i];
   getline(infile, Name[i]);
   infile >> Hours[i] >> Rate[i];

   infile.ignore();
 }     
} 

我没有得到任何结果。

void print(intarray ID, starray Name, intarray Hours, farray Rate, ifstream & infile)
{
for(int i = 0; i < Size; i++)
  {
   cout << ID[i] << endl;
   cout<<Name[i]<<endl;
   cout << Hours[i] << Rate[i] << endl;


  }     
}   

1 个答案:

答案 0 :(得分:0)

当您在readdata中调用getline时,您正在读取ID之后的行尾字符。在调用getline之前,您需要使用名称定位在该行上。试试这个

infile >> ID[i];
infile.ignore(); //Consume the new line char
getline(infile, Name[i]);
infile >> Hours[i] >> Rate[i];