从文件中逐行读取并存储到二维数组中

Posted

技术标签:

【中文标题】从文件中逐行读取并存储到二维数组中【英文标题】:Reading line by line from a file and storing into a 2d array 【发布时间】:2018-02-26 21:05:40 【问题描述】:

我正在尝试从文件中逐行读取并将其存储到二维数组中。我得到了一个非常奇怪的输出,它是下面的屏幕截图。 输入文件如下所示:

-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;
    

SCREENSHOT

【问题讨论】:

NumOfColms 是如何确定的?这不是MCVE 它是从不同的文件中获取的。但本质上,它们都等于 3 那么我将如何跳过空格和 /n @drescherjm 检查line 中的空白字符并删除它们 【参考方案1】:

您有如此奇怪的输出的原因是因为您在阅读每一行之后都会完整打印出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 的所有元素分配了值.

【讨论】:

【参考方案2】:

我在这里猜测,但没有看到您声明、分配内存和 null 终止数组的代码,我认为这需要修复。你得到的输出表明你可能出于某种原因超出了你的数组,因为你得到了看起来像垃圾数据的输出。我以前见过这种情况。

另外,NumOfRowsNumOfColumns 是如何计算的?我对此也有疑问。

【讨论】:

以上是关于从文件中逐行读取并存储到二维数组中的主要内容,如果未能解决你的问题,请参考以下文章

如何为二维数组分配和释放堆内存?

如何在 Julia 中逐行读取文件?

如何从文本文件创建二维数组并在 c 中打印到新文件

C ++在循环中逐行写入文件或添加到数组并在循环后写入文件?

在 Swift 中逐行读取文件/URL

DELPHI中逐行读取并复制