繁体   English   中英

从文本文件读入数组

[英]Reading from text file into an array

我正在尝试将用Vim编辑的文本文件读入数组。

文本文件为30 * 50,由一位数字组成。 我一直在疯狂尝试使其工作,但是我认为由于换行符而引起的问题。 这是我一直在使用的:

Map::Map(char* filename)
{
grid[30][50] = (0);
string line;
ifstream m_file(filename);
if (m_file.is_open())
        {
                while(m_file.good())
                 {
                        for (int i = 0; i < 30; i++)
                        {
                        getline(m_file,line);
                                 for (int k = 0; k < 50; k++)
                                {
                                int tnum = atoi(line.c_str());
                                grid[i][k] = tnum;
                                }
                        }
                }
                m_file.close();
        }
};

grid在头文件中定义为int grid [30] [50]。

我用于打印的代码如下:

void display_room(int trid[30][50])
{
        for (int i = 0; i < 30; i++)
        {
                for (int k = 0; k < 50; k++)
                {
                        mvprintw(i,k,"%d",trid[i][k]);
                };
        };
};

在调用Map sMap = Map(“ testmap”);之后;

我只是试图将单个数字捕获到一个数组中,然后(使用curses)重新打印该数组。 当前,无论测试图文件中有什么内容,它都会读取测试图文件并打印全零。

如果我了解您的问题:您的解析会从整行开始设置值,而整行应该只包含一位数字...

int tnum = atoi(line.c_str());
grid[i][k] = tnum;

可以通过以下方式将数字(ASCII转换为int / byte / ...):

grid[i][k] = line[k] - '0';

(也许需要一些强制转换。)

在内部循环中,您每次都使用该行的全部内容调用atoi 由于该行的长度为50个字符, atoi无法将其转换为intint可以表示的最大值是2147483647,并且您的数字可能大于该数字)。 atoi失败时,它返回0

您需要将行的每个字符转换为一个int 像这样:

for (int i = 0; i < 30; i++)
{
    getline(m_file,line);
    for (int k = 0; k < 50; k++)
    {
        // The ASCII character of the digits 0 to 9 have
        // successives values.
        int tnum = line[k] - '0';
        grid[i][k] = tnum;
    }
}

再次查看您的代码。 尝试查看实际所说的内容,而不是您希望的内容

int tnum = atoi(line.c_str());

您明确希望该行依次读取该行上的五十个数字。 但这并没有说明。 它试图将行变成整数(并尝试执行五十次)。

由于您的数字是个位数,因此您实际上需要简单得多的东西

int tnum = line[k] - '0';

通过说line [k],您将在每次循环中得到一个不同的数字(因为k每次循环都增加)。 - '0'位只是将字符转换为整数的一个技巧。 看看您是否可以知道它是如何工作的。

暂无
暂无

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

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