我目前正处于编程的一部分。 我已经创建了一个函数来获取2D数组的行数和列数,然后使用输入文件中的信息填充该数组。
我现在需要在另一个函数中使用该数组来显示数组。 这是当前的代码。 此外,我不能以任何方式修改函数定义,所以我很确定我必须使用指针,这些真的让我很困惑。
有人可以澄清或帮助吗?
void populateWorld (const char * file)
{
int numchar = 0;
int numline = 0;
char a;
ifstream inFile;
inFile.open("glider_gun_fight.txt");
inFile.get(a);
while(inFile)
{
while(inFile && a != '\n')
{
numchar = numchar + 1;
inFile.get(a);
}
numline = numline + 1;
inFile.get(a);
}
ROWS = numline;
COLUMNS = numchar / numline;
inFile.close();
inFile.open("glider_gun_fight.txt");
char gameBoard[ROWS][COLUMNS];
for(int r = 0; r < ROWS; r++)
{
for(int c = 0; c < COLUMNS; c++)
{
inFile >> gameBoard [r][c];
}
}
inFile.close();
}
//This function outputs the grid for current generation (add high level
//description of your implementation logic)
void showWorld ()
{
for(int r = 0; r < ROWS; r++)
{
for(int c = 0; c < COLUMNS; c++)
{
cout << gameBoard [r][c];
}
cout << endl;
}
}
答案 0 :(得分:0)
在不更改函数声明的情况下,您无法在外部世界中传递此函数中创建的数组。:) 还要考虑到您的功能不符合C ++。在C ++中,数组大小在编译时是常量表达式。 Moover如果文件包含制表符,则其输出可能与您预期的不同。
答案 1 :(得分:0)
在不更改函数声明的情况下,剩下的唯一可能性是全局变量:
char **gameBoard;
void populateWorld (const char * file) {
//...
//char gameBoard[ROWS][COLUMNS]; //Not local anymore, instead allocate dynamically:
gameBoard = new char*[ROWS];
for(int r = 0; r < ROWS; r++)
{
gameBoard[r] = new char[COLUMNS];
for(int c = 0; c < COLUMNS; c++)
{
inFile >> gameBoard [r][c];
}
}
//...
}
然后另一个功能按原样工作。但是应该避免全局变量。 (虽然ROWS
和COLUMNS
似乎已经是全球性的,但是还有一个不会造成太大的伤害。)
当不再需要delete[]
时,不要忘记再次释放已分配的内存。
正如我所说,C ++中还有其他方法,例如string
,getline
和vector
,其中一个方法应该使用。