C++ 需要帮助将.txt字符分配到2d数组中。C++;
我正在做一个学校的项目,包括从一个.txt文件中取出一个预先设计好的25x25迷宫,输入到一个二维数组中,然后打印到控制台上,并在迷宫中移动一个角色。我遇到的主要问题是将字符移动到数组中。我觉得我很接近,但是我的代码导致程序崩溃 下面是我用来将字符移动到数组中的循环: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
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;rowResetcol
在每行之后归零(在while(temp!='\n')
循环之前或之后)。Resetcol
在每行之后归零(在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();
都需要进行测试,以防您没有得到。