繁体   English   中英

将输入文件中的二维数组加载到 Function

[英]Loading a 2D array from an input file into a Function

我无法从输入文件加载 10x10 数组并将其存储到数组中。 到目前为止,我已经写了这个:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void LoadImage(const string imagefile, int image[MAXROWS][MAXCOLS]) //Function to load in image
{
    ifstream inputs;
    int i,j;

    inputs.open(imagefile.c_str());
        
    getline(inputs, imagefile[i][j]);
    inputs.ignore(10000,'\n');
    
    if (inputs.is_open())
    {
        for( i=0; i < MAXROWS; i++ )
        {
            for ( j=0; i < MAXCOLS; j++ )
            {
                inputs >> image[i][j];
            }
        }
    }
    
    inputs.close();
}

void LoadImage function 并提供给我使用这些特定参数,否则主 function 将无法执行。 输入文件的示例:

#Sample Image--1

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 1 1 1 1 0 0 0 0
0 0 1 1 1 1 0 0 0 0
0 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

在构建数组之前,我必须摆脱输入文件的 header 。 如果我编译我现在拥有的内容,则会收到“错误:数组下标 getline(inputs, imagefile[i][j]) 的无效类型'const char[int]';”

我明白为什么我会收到错误,但我不知道如何解决它。 我很感激我能得到的任何帮助!

线

getline(inputs, imagefile[i][j]);

没有意义。

如果你想忽略输入文件的第一行,那么你应该简单地使用inputs.ignore ,因为你已经在这样做了。 因此,您可以简单地删除调用getline的行。

另一个问题是线路

for ( j=0; i < MAXCOLS; j++ )

应该是

for ( j=0; j < MAXCOLS; j++ )

即你写了i而不是j

代码一般没问题,只要按照注释和修复一些小错误就可以了。 特别注意以下循环的终止条件:

for ( j=0; i < MAXCOLS; j++ )

应该改为:

for ( j=0; j < MAXCOLS; j++ )

这就是你得到一个无限循环的原因。

这是完整的代码:

#include <iostream>
#include <fstream>
#include <string>

#define MAXROWS 10
#define MAXCOLS 10

using namespace std;

void LoadImage(const string imagefile, int image[MAXROWS][MAXCOLS]) //Function to load in image

{
    ifstream inputs;
    int i,j;

    inputs.open(imagefile.c_str());

    if (inputs.is_open())
    {
        for( i=0; i < MAXROWS; i++)
        {
            for (  j=0; j < MAXCOLS; j ++)
            {
                std::string str;

                inputs >> image[i][j];
            }
        }
    }

    inputs.close();
}

void PrintImage(int image[MAXROWS][MAXCOLS])
{
    int i,j;

    for(i = 0; i < MAXROWS; i++)
    {
        for (j = 0; j < MAXCOLS; j ++)
        {
            cout << image[i][j] << " ";
        }
        cout << endl;
    }
}

int main()
{
    int image[MAXROWS][MAXCOLS] = {0,};

    LoadImage ("img.mtx", image);

    PrintImage (image);
}

和测试:

$ cat img.mtx 
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 0 0 0 0 
0 0 0 0 1 1 0 0 0 0 
0 0 1 1 1 1 0 0 0 0 
0 0 1 1 1 1 0 0 0 0 
0 0 0 0 0 0 1 1 0 0 
0 0 0 0 0 0 1 1 0 0 
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

$ g++ main.cpp && ./a.out 
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 1 1 0 0 0 0 
0 0 0 0 1 1 0 0 0 0 
0 0 1 1 1 1 0 0 0 0 
0 0 1 1 1 1 0 0 0 0 
0 0 0 0 0 0 1 1 0 0 
0 0 0 0 0 0 1 1 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM