如何将读取的数据添加到数组?

时间:2019-01-16 11:04:34

标签: c++ arrays

我有一个文本文件,其中每行分组六个产品代码,产品名称和产品价格。每条线都有不同的产品。我使用了forfin来读取数据。现在,我想将这些数据添加到数组中。

产品代码设置为pcode,产品名称设置为pname,产品价格设置为pprice,数组设置为arrP[]。我被告知要使用setData将这些数据添加到数组中,为此我在类Product中有一个构造函数。

数据读取有效。但是,我不明白如何使用setData将它们添加到arrP[]中。我在读取数据的同一arrP[i].setData(pcode, pname, pprice);中尝试过for,但显然是错误的,因为它将在执行该行时崩溃。下面,我引用我关于这部分的代码。

这是读取数据并将其移至数组的函数代码(N定义为6):

int addptoarray(ifstream &fin, Product arrP[])
{
  Product p;
  int pcode;
  int i;
  char pname[21];
  float pprice;

  n = 0;


  for(i=0; i<N; i=i+1){

  fin >> pcode;

  fin.get(pname, 21);

  fin >> pprice;


  arrP[i].setData(pcode, pname, pprice);


  n = n+1;

  }


}

这是main上触发功能的部分(N定义为6):

[...]
addptoarray(infile, arrP[N]);
[...]

这是setData类中Product的构造函数的代码:

void Product::setData(int pcode1, char pname1[], float pprice1)
{
pcode = pcode1;
pname[21] = pname1[21];
pprice = pprice1;
}

1 个答案:

答案 0 :(得分:1)

"category": "Club, Seniors"

好的,char pname[21]; 是一个包含21个条目的数组。

pname

该中间线没有任何意义。中间一行尝试设置void Product::setData(int pcode1, char pname1[], float pprice1) { pcode = pcode1; pname[21] = pname1[21]; pprice = pprice1; } 中第22个条目的值。为什么?因为pnamepname[0]中的第一项,而pname是第二项。因此,pname[1]尝试将pname[21] = ...中的第22个条目设置为某项。

但是pname只有21个条目。尝试将其第22个条目设置为某项是对数组的访问超出范围。

如果您期望pname是一个字符串,则没有任何代码可以反映出来。它实际上不是字符串类型(C ++有),并且您没有使用C样式的字符串函数(如pname)来操纵它。因此,它根本不会像字符串一样。