![](/img/trans.png)
[英]Reading a line from a text file and storing it into a 2D vector in C++
[英]Reading line by line from a file and storing into a 2d array
我正在尝试从文件中逐行读取并将其存储到二维数组中。 我得到了一个非常奇怪的输出,这是下面的屏幕截图。 输入文件如下所示:
-x-
xx-
--x
代码如下:
int counter=-1;
while(getline(InputFile,line))
{
counter++;
//cout<<"line size is "<<line.size()<<endl;
for (int i=0;i<NumOfColms;++i)
{
if (line[i]=='-')
{
//cout<<"0 ";
CurrentArray[counter][i]=0;
}
else if (line [i]=='X'||line [i]=='x')
{
//cout<<"x ";
CurrentArray[counter][i]=1;
}
}
//cout<<endl;
for (int i=0;i<NumOfRows;++i)
{
for (int j=0;j<NumOfColms;++j)
{
cout<<CurrentArray[i][j]<<" ";
}
cout<<endl;
}
}
您有如此奇怪的输出的原因是因为您在阅读的每一行之后都完整地打印出CurrentArray
的内容。 所以从你的图像来看,这看起来像这样:
Line -x- read
0 1 0 //-- CurrentArray[0][0..1..2], which is -x-
7431232 7407000 1951160272 //-- CurrentArray[1][0..1..2]
7406760 7407000 0 //-- CurrentArray[2][0..1..2]
Line xx- read
0 1 0 //-- CurrentArray[0][0..1..2], which is -x-
1 1 0 //-- CurrentArray[1][0..1..2], which is xx-
7406760 7407000 0 //-- CurrentArray[2][0..1..2]
Line --x read
0 1 0 //-- CurrentArray[0][0..1..2], which is -x-
1 1 0 //-- CurrentArray[1][0..1..2], which is xx-
0 0 1 //-- CurrentArray[2][0..1..2], which is --x
如您所见,第 1 次和第 2 次迭代打印出一些垃圾,这些垃圾在您为CurrentArray
分配空间时在内存中,但只有第 3 次打印出正确的数据,因为到那时您已为所有元素分配了正确的值。
解决方案:将打印输出循环移出while
范围并将其放在它之后,因此当while
循环完成时,您已将值分配给CurrentArray
所有元素。
我在这里猜测,但没有看到您声明、分配内存和空终止数组的代码,我认为这需要修复。 您得到的输出表明您可能出于某种原因超出了数组,因为您得到的输出看起来是垃圾数据。 我以前见过这种情况。
另外, NumOfRows
和NumOfColumns
是如何计算的? 我对此也有疑问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.