我有一个文本文件,其中每行分组六个产品代码,产品名称和产品价格。每条线都有不同的产品。我用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;
}

最佳答案

char pname[21];


好的,pname是一个包含21个条目的数组。

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


该中间线没有任何意义。中线尝试在pname中设置第22个条目的值。为什么?因为pname[0]pname中的第一项,而pname[1]是第二项。因此,pname[21] = ...尝试将pname中的第22个条目设置为某些内容。

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

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

关于c++ - 如何将读取的数据添加到数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54215676/

10-11 11:55