C++ 将文本文件中的字符串、整数、浮点数读取到 array/string

C++ reading strings,int,floats from a text file into a array/string

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

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

第一个整数是员工 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;


  }     
}   

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

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