我发现我的代码没有任何问题,但编译器一直在抱怨我。它说错误:33:19预期';'或数字常量前的','或')' 它让我疯狂,这是它指向的线条的片段。它以粗体显示。如果你们能帮助我的话。那将是非常感谢。顺便说一句,我试图让生活游戏。 我知道花括号最后搞砸了。我只想知道33号线的错误。它与周围的asteriska一致。 void initGrid(int ROWS,int COLUMNS,int g [ROWS] [COLUMNS])
int getUserInput();
void initGrid(int, int, int[ROWS][COLUMNS]);
void processGeneration(int, int, int[ROWS][COLUMNS]);
int countNeighbors(int, int, int[ROWS][COLUMNS], int, int);
void printtoGrid(int, int, int[ROWS][COLUMNS]);
void sleep(unsigned int);
int main()
{
return 0;
}
//*************
int getUserInput()
{
int g;
printf("Thanks for playing!\n");
printf("How many generations do you want to watch: ");
scanf("%d", &g);
return g;
}
//********************
**void initGrid(int ROWS, int COLUMNS, int g[ROWS][COLUMNS])**
{
int i, j, k;
for(i = 0; i < ROWS; i++)
{
for(j = 0; j < COLUMNS; j++)
{
/*
[-1][-1][-1][-1][-1]
[-1][ ][ ][ ][-1]
[-1][ ][ ][ ][-1]
[-1][-1][-1][-1][-1]
*/
if(i == 0 || i == (ROWS - 1) || j == 0 || j == (COLUMNS - 1))
g[i][j] = -1;
else
{
k = rand() % 3;
if(k == 0)
{
g[i][j] = 1;
population++;
}
else g[i][j] = 0;
}
} }
答案 0 :(得分:2)
很可能c预处理器将ROWS扩展为ROWS定义为。
如果ROWS定义为4
void InitGrid(int ROWS, int COLUMNS, int g[ROWS][COLUMNS])
会变成
void InitGrid(int 4, int COLUMNS, int g[4][COLUMNS])
由于int 4
是语法错误,因此您需要提供不同的变量名称(例如行),以便预处理器不会展开它。
答案 1 :(得分:1)
听起来像ROWS是一个在某处定义的常量(在范围内)。
不知道ROWS是否在某个标题中定义,我会尝试使用不同的变量名而不是ROWS。
例如:
void initGrid(int rowCount, int COLUMNS, int g[ROWS][COLUMNS])
{
int i, j, k;
for(i = 0; i < rowCount; i++)
{
for(j = 0; j < COLUMNS; j++)
{
...
然而,如果这可能只会改变问题。如果ROWS是常量,我会假设COLUMNS也是,所以将COLUMNS更改为像columnCount这样的东西会有帮助。
最后,如其他地方所述,尝试使用int g[ROWS][COLUMNS]
也会有问题。通过int *g
可以解决问题。
最终结果看起来像
void initGrid(int rowCount, int columnCount, int *g)
如果ROWS和COLUMNS是常量,你根本无法在函数原型中传递它们,只需像你一样在for循环中使用它们:
void initGrid(int *g)
{
int i, j, k;
for(i = 0; i < ROWS; i++)
{
for(j = 0; j < COLUMNS; j++)
{
...
但是,如果你想让这个功能更通用,我就不会去那个方向。
答案 2 :(得分:0)
C语言不支持向函数传递一个数组参数,该参数的大小在另一个参数中给出。所以尝试改变:
void InitGrid(int ROWS, int COLUMNS, int g[ROWS][COLUMNS])
为:
void InitGrid(int ROWS, int COLUMNS, int* g)
由于编译器需要在编译时知道数组的维度大小以支持多维度,因此您需要更改访问g
的代码以在运行时计算索引 - 改变:
g[i][j] = -1;
为:
g[i*COLUMNS+j] = -1;
[编辑 - 如果ROWS和COLUMNS被#defined定义为@FDinoff建议]
如果ROWS和COLUMNS是#define,它们是硬编码的常量,尝试将它们作为参数传递是没有意义的 - 试试这个:
void InitGrid(int g[ROWS][COLUMNS])
答案 3 :(得分:0)
你错过了几个大括号。更正版本;
void InitGrid(int ROWS, int COLUMNS, int g[ROWS][COLUMNS])
{
int i, j, k;
for(i = 0; i < ROWS; i++)
{
for(j = 0; j < COLUMNS; j++)
{
/*
[-1][-1][-1][-1][-1]
[-1][ ][ ][ ][-1]
[-1][ ][ ][ ][-1]
[-1][-1][-1][-1][-1]
*/
if(i == 0 || i == (ROWS - 1) || j == 0 || j == (COLUMNS - 1))
{
g[i][j] = -1;
}
}
}
}
答案 4 :(得分:0)
前几行中的函数原型应该是... int,int,int [] [] ...
换句话说,省略代码第2,3,4和5行中的ROWS和COLUMNS。