我有一个文本文件,其中每行分组六个产品代码,产品名称和产品价格。每条线都有不同的产品。我用for
和fin
读取数据。现在,我想将这些数据添加到数组中。
产品代码设置为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/