如何将文本文件读入结构数组? C ++

时间:2019-07-11 09:51:10

标签: c++

我正在尝试将一些足球运动员数据输入到一组足球运动员(结构)中

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct sPlayer{
  char lname[20];
  char fname[20];
  int birthmonth;
  int birthday;
  int birthyear;
};

int main() {

  sPlayer players[10] = {};
  string input;
  string foo;

  ifstream inputFile;
  inputFile.open("players.txt");

  //check for error
  if (inputFile.fail()){
    cerr << "error opening file" << endl;
    exit(1);
  }

  int count = 0;
  while (!inputFile.eof()){

    getline(inputFile, input, ' ');
    players[count].lname = input;
    count++;

  }

  inputFile.close();

  cout << input;
  cout << "\n2–display original data, 3–sort data , 4–display sorted data 5–search by lastname 6–exit the program\n";
}

players.txt 文件:

Roberto Baggio 01 12 1992
David Beckham 05 12 1988
Pablo Aimar 05 13 1987
Michael Ballack 11 13 1999
Gabriel Batistuta 05 05 1979
Franz Beckenbauer 18 01 1976
Dennis Bergcamp 03 14 1989
Omar Bravo 03 03 1999
Jared Borgetti 09 23 1977
Fabio Cannavaro 02 25 1991

由于无法分配players[count].lname来输入而出现错误,但是我不知道如何匹配我的数据类型。我正在用2个char数组读取fname和lname,用3个整数表示生日/月份/年份。

1 个答案:

答案 0 :(得分:3)

您可以做几件事,但这是正确的,可能取决于您项目中未曾告诉我们的其他方面。

简单的事情是将结构更改为使用std::string而不是char数组。

struct sPlayer{
  string lname;
  string fname;
  int birthmonth;
  int birthday;
  int birthyear;
};

现在您的代码将被编译。无疑这是一件容易的事,所以除非您有充分的理由使用char数组,否则我会这么做。

您可以做的另一件事是正确执行从std::string到char数组的分配。 C ++中的数组很差,如果要复制它们,则必须采取特殊步骤。在您的代码中,您可以使用strcpy函数

strcpy(players[count].lname, input.c_str());

此代码具有风险,因为如果您读取的字符串不适合20个字符的数组,它将失败。复制之前,应先检查这种可能性。

正如评论中已经指出的

while (!inputFile.eof()) {
    getline(inputFile, input, ' ');
    ...
}

不正确。正确的版本是

while (getline(inputFile, input, ' ')) {
    ...
}