C++ 需要帮助将.txt字符分配到2d数组中。C++;

C++ 需要帮助将.txt字符分配到2d数组中。C++;,c++,for-loop,multidimensional-array,fstream,maze,C++,For Loop,Multidimensional Array,Fstream,Maze,我正在做一个学校的项目,包括从一个.txt文件中取出一个预先设计好的25x25迷宫,输入到一个二维数组中,然后打印到控制台上,并在迷宫中移动一个角色。我遇到的主要问题是将字符移动到数组中。我觉得我很接近,但是我的代码导致程序崩溃 下面是我用来将字符移动到数组中的循环: int col=0; ifstream inFile; inFile.open("maze.txt"); char temp = inFile.get(); while(!inFile.eof()) { for(int r

我正在做一个学校的项目,包括从一个.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();
int col=0;
河流充填;
infle.open(“maze.txt”);
char temp=infle.get();
而(!infle.eof())
{

对于(int row=0;rowReset
col
在每行之后归零(在
while(temp!='\n')
循环之前或之后)。

Reset
col
在每行之后归零(在
while(temp!='\n')
循环之前或之后).

您的输入在文本文件中的列数可能比在数组中定义的列数多。更好的方法是在文本文件中定义数组的大小,然后使用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();

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

#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();

你可以先让你的程序确保它成功地打开了文件。边界是如何声明/分配的?它在哪里崩溃,堆栈跟踪是什么?另外,在每次调用get()后检查EOF,而不仅仅是在外部循环中,因为这意味着“去加载另一个迷宫”如果输入文件中有多余的字符,导致当前循环配置中的
col
索引溢出。@ScottHunter我添加了一些代码来验证它,它确实在.txt文件崩溃之前打开了该文件。您是否尝试调试程序?您可以先让程序确保它成功打开file.
boundary
是如何声明/分配的?它在哪里崩溃,堆栈跟踪是什么?另外,在每次调用get()之后检查EOF,而不仅仅是在外部循环中,因为这意味着“去加载另一个迷宫”如果输入文件中有多余的字符,导致当前循环配置中的
col
索引溢出。@ScottHunter我添加了一些代码来验证它,它确实在.txt文件崩溃之前打开了它。您是否尝试调试您的程序?这就是问题所在。我觉得错过了这一点就像白痴一样。谢谢您的提示作为一个问题。你应该考虑解决问题下方注释中的一些注释。
while eof
迟早会抓住你的。@user4581301我为每个语句添加了一个if语句以防止出现这种情况。你需要多个if语句。每个
temp=infle.get()
在您尝试使用读取的字符之前需要进行测试,以防您没有读取字符。这就是问题所在。我觉得错过了这个字符像个白痴。谢谢,这是一个问题。您应该考虑解决问题下方注释中的一些注释。
while eof
迟早会抓住您。@user4581301我为每个添加了一个if语句以防止出现这种情况。您将需要多个if语句。在尝试使用read字符之前,每个
temp=infle.get();
都需要进行测试,以防您没有得到。