将txt文件值存储到2D数组中

时间:2015-05-25 15:40:19

标签: c++ arrays 2d

首先,这是我的代码http://pastebin.com/BxpE7aFA

现在。我想读一个看起来像http://pastebin.com/d3PWqSTV的文本文件 并将所有这些整数放入一个名为level的数组中。 level的大小为100x25,在顶部声明。

我现在唯一的问题是你看到???。如何从文件中获取char,并将其放入level [i] [j]?

2 个答案:

答案 0 :(得分:2)

检查矩阵的初始化代码,它也应该是int level[HEIGHT][WIDTH];而不是int level[WIDTH][HEIGHT];,您的数据行比WIDTH短。代码以下一种方式工作:我们遍历级别矩阵的所有行,通过(file >> row)指令从文件中读取一行,如果读取成功,则我们在级别矩阵中填充行,否则我们读取EOF所以从循环中脱离。

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

    static const int WIDTH = 100;
    static const int HEIGHT = 25;

    int main()
    {
        int level[HEIGHT][WIDTH];

        for(int i = 0; i < HEIGHT; i++)
        {
            for(int j = 0; j < WIDTH; j++)
            {
                level[i][j] = 0;
            }
        }

        std::ifstream file("Load/Level.txt");
        for(int i = 0; i < HEIGHT; i++)
        {
            std::string row;
            if (file >> row) {
                for (int j = 0; j != std::min<int>(WIDTH, row.length()) ; ++j)
                {
                    level[i][j] = row[j]-0x30;
                }
                std::cout << row << std::endl;
            } else break;
        }

        return 0;
    }

答案 1 :(得分:0)

您可以使用file >> level[i][j];使用level[ ][ ]的内容填充2D字符数组level.txt

#include<iostream>
#include<fstream>
#include<string>
using namespace std;

static const int WIDTH = 100;
static const int HEIGHT = 25;
char level[HEIGHT][WIDTH]={0};


int main()
{

    std::ifstream file;
    file.open("level.txt");

    if(file.is_open())
    {
            std::cout << "File Opened successfully!!!. Reading data from file into array" << std::endl;
            while(!file.eof())
            {
                    for(int i = 0; i < HEIGHT; i++)
                    {
                            for(int j = 0; j < WIDTH; j++)
                            {
                                    //level[i][j] = ???
                                    file >> level[i][j];
                                    std::cout << level[i][j];
                            }
                            std::cout << std::endl;
                    }
            }

    }
    file.close();

    return 0;
}