文本文件中的数据未写入数组

问题描述 投票:0回答:1

我正在尝试将文本文件中的数据写入数组,但是当我想从该数组中写出值时,它全是零。文本文件的前两行是数字 25,其余是一堆 1 和 0

string line;
    int linenr=3;

    fstream plik;
    plik.open("Maps/default.txt", ios::in);

    if(plik.good() == true)
    {

        while (getline(plik, line))
        {
            for(int x=0;x<25;x++)
            {
                for(int y=0;y<25;y++)
                {
                    map[x][y] = atoi(line.c_str());
                }
            }
            linenr++;
        }
    }

我试图在 while 循环中放置一个 getline 函数,这样它会被调用到文本的最后一行,同时 getline 函数会将文本写入“line”字符串。接下来,字符串中的值将被解析为数组单元格。

c++ arrays file-io
1个回答
0
投票

仅供参考,

std::istream
在查找整数时跳过换行符和空格:

for (int row = 0; row < 25; ++row)
{
    for (int column = 0; column < 25; ++column)
    {
        int value = 0;
        plik >> value;
        matrix[row][column] = value;
    }
}

上面的片段会将整数读入 25x25 矩阵。
假设输入是空格分隔的整数。

编辑1:逐行
假设每一行包含一行数据。

for (int row = 0; row < 25; ++row)
{
    // Read in a row of numbers.
    std::string row_text;
    std::getline(plik, row_text);

    // Process the row text
    std::istringstream row_stream(row_text);
    int value = 0;
    for (int column = 0; column < 25; ++column)
    {
        row_stream >> value;
        map[row][column] = value;
    }
}

编辑2:非常简单
这里很简单,但是你需要添加一些验证:

int value;
int row = 0;
int column = 0;
while (plik >> value)
{
   matrix[row][column] = value;
   ++column;
   if (column >= 25)
   {
       column = 0;
       ++row;
   }
}

还有其他方法可以将空格分隔的输入读入矩阵。

© www.soinside.com 2019 - 2024. All rights reserved.