我目前在 C++ 方面的背景是我已经参加了一个学期的大学课程。
我很难弄清楚如何使我在 if-else 语句中分配的值保留在它之外。我想如果我事先在外面声明它并使用指针自己处理内存地址,这将是公平的游戏,但显然不是。
我现在的“迷宫”文件:
. # # # # # #
. . . . . # #
# . # # . # #
# . # # . . #
# . . # # . #
# . # # . . #
# . # # . # #
. . . # . . .
# # . . . # #
这就是我在 maze.h 文件中定义的构造函数。我还没有完成大部分程序,但是我的 main.cpp 已经处理了计算文本文件的迷宫尺寸,然后它只是调用
Maze *testMaze = new Maze(rows,columns);
我的 maze.h 文件将 bool maze[0][0] 列为私有成员。它设置为 0 是因为在代码第一次执行时,还没有办法知道迷宫的大小。我运行代码来计算大小,然后将行和列作为参数传递给 Maze 构造函数。
我的 maze.cpp 文件的带有参数的构造函数:
Maze::Maze(int rows, int columns)
{
string mazeRow="";
int roIndex=0; //Row Index
int coIndex=0; //Column Index
bool maze[rows][columns];
bool* target = NULL;
ifstream input;
input.open("MAZE",ios::in);
if(input)
{
while (getline(input, mazeRow))
{
//Testprint this row of the maze.
cout << mazeRow << endl; //mazeRow is the data in that row of the text file.
//Store each non-space value.
for (coIndex=0; coIndex<mazeRow.length(); coIndex++) //For each character in that row...
{
char check=mazeRow[coIndex];
target = &maze[roIndex][coIndex];
if (check=='.') //Path
{
*target=true;
cout << *target << " "; //These print statements print correctly.
}
else if (check=='#') //Wall
{
*target=false;
cout << *target << " "; //These print statements print correctly.
}
else if (check==' ') //Space
{
//ignore spaces
}
else //For all other cases, an invalid character is present.
{
cout << "Invalid character detected." << endl;
}
cout << *target << " "; //For some odd reason, this line BY ITSELF doubles up print. Ex. instead of printing 1 1 0 1 0, it would print 1 1 1 1 0 0 1 1 0 0.
}
cout << "End of row." << endl;
roIndex++;
}
}
input.close();
cout << "Storage completed." << endl;
for (int i=0; i<rows; i++)
{
cout << "Row " << i << endl;
for (int j=0; j<columns; j++)
{
/* This is the print test to see if the values
are retained outside of the first block.
None of them print the maze file properly.
*/
if (maze[i][j] == true)
cout << maze[i][j] << "\t" << "." << "\t";
if (maze[i][j] == false)
cout << maze[i][j] << "\t" << "#" << "\t";
cout << "Column " << j << endl;
}
cout << "End of row." << endl;
}
cout << "Verification completed." << endl;
}
第一次在这里问问题,所以如果我遗漏了什么,请告诉我。
只是想在这里更新一下。事实证明,我要么压力过大,要么睡眠不足,要么两者兼而有之。把这段代码放了几个小时重新看了一遍,发现代码中逻辑错误太多了,包括但不限于忘记了某些变量为什么存在以及它们是干什么用的,都没有想清楚在循环中递增 (++) 的后果,以及其他类似的草率错误。我已经接受了下面的几个答案/评论,并刷新了我对自己代码的理解,帮助我纠正了这些错误。当我解决它时,如果可以的话,我会提供一个完成的代码。
解决了这个问题。我将能够在几个小时内自行回答并解释当时实际发生的事情。