【问题标题】:Need help assigning .txt characters into a 2d array. C++需要帮助将 .txt 字符分配到二维数组中。 C++
【发布时间】:2016-08-12 06:22:30
【问题描述】:

我正在开展一个学校项目,该项目涉及从 .txt 文件中获取预先设计的 25x25 迷宫并将其输入到二维数组中,然后将其打印到控制台上并在迷宫中移动角色。我遇到的主要问题是将字符移动到数组中。我觉得我已经接近了,但我拥有的代码导致程序崩溃。

这是我用来将字符移动到数组中的循环:

int col=0;
ifstream inFile;
inFile.open("maze.txt");
char temp = inFile.get();
while(!inFile.eof())
{
    for(int row=0; row<25; row++)
    {
        while(temp != '\n')
        {
            boundary[row][col] = temp;
            col++;
            temp=inFile.get();
        }
        temp=inFile.get();
    }
}
inFile.close();

本质上,关键是将空格和块字符移动到 25x25 字符数组中,方法是将每行中的所有字符放入数组的同一行,直到它到达一个换行符,然后它应该移动到下一个下一行的字符,然后再次开始 while 循环。

它编译得很好,但是程序在它可以移动到任何其他代码之前就崩溃了。 如果您知道如何在不大幅更改格式的情况下修复它,我将不胜感激,因为这只是一小部分,但如果需要,我愿意从头开始。

【问题讨论】:

  • 您可以先让您的程序确保它成功打开文件。
  • boundary 是如何声明/分配的?它在哪里崩溃,堆栈跟踪是什么?另外,在每次调用 get() 后检查 EOF,而不仅仅是在外部循环中,因为如果输入文件中有任何多余的字符,这将意味着“去加载另一个迷宫”,导致 col 溢出当前循环配置中的索引。
  • @ScottHunter 我添加了一些代码来验证它,它确实在崩溃之前打开了 .txt 文件。
  • 您尝试调试您的程序吗?

标签: c++ for-loop multidimensional-array fstream maze


【解决方案1】:

在每一行之后(while(temp != '\n') 循环之前或之后)将col 重置为零。

【讨论】:

  • 这就是问题所在。我觉得自己像个白痴一样错过了这一点。非常感谢
  • 那是一个的问题。您应该考虑解决问题下方 cmets 中的一些注释。 while eof 迟早会抓住你的。
  • @user4581301 我为每个添加了一个 if 语句来防止这种情况发生。
  • 您需要多个 if 语句。每个temp=inFile.get(); 都需要在您尝试使用读取的字符之前进行测试,以防您没有得到一个。
【解决方案2】:

您的输入在文本文件中的列数可能多于您在数组中定义的列数。更好的方法是在文本文件中定义数组的大小,然后使用 malloc 进行分配,但是如果您知道列和行的确切大小不会改变,那么您可以使用静态定义的数组大小。你也不需要 for 循环。

#define max_col = 25;
#define max_row = 25;

char boundary[max_row][max_col];

int col=0;
int row=0;

ifstream inFile;
inFile.open("maze.txt");
char temp = inFile.get();

while(!inFile.eof())
{

    boundary[row][col] = temp;
    if(++col > max_col || temp == '\n') { 
       col = 0;
       if(++row > max_row) return -1; // depends how you want to handle 
    }

    temp=inFile.get();
}

inFile.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    相关资源
    最近更新 更多