-2

而且我找不到我的代码有什么问题,但编译器一直在抱怨我。它说错误:33:19 预期';' 或 ',' 或 ')' 在数字常量之前。
它把我逼疯了,这是它所指的那条线的片段。它以粗体显示。如果你们能帮帮我。那将是非常感谢。顺便说一句,我正在尝试制作生活游戏。我知道花括号最后搞砸了。我只想知道第 33 行有什么问题。它周围有星号。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;

     }

} }

4

5 回答 5

2

c 预处理器很可能将 int 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是语法错误,因此您需要提供不同的变量名称(例如行),以便预处理器不会扩展它。

于 2013-05-03T17:48:34.407 回答
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++)
      { 
       ...

但是,如果您希望该功能更通用,我不会朝那个方向发展。

于 2013-05-03T17:44:52.240 回答
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 是#defines,它们是硬编码的常量,尝试将它们作为参数传递是没有意义的——试试这个:

void InitGrid(int g[ROWS][COLUMNS])
于 2013-05-03T17:43:40.123 回答
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;
            }
        }
   }
}
于 2013-05-03T17:43:47.700 回答
0

前几行中的函数原型应该是 ... int, int, int[][] ...

换句话说,在代码的第 2、3、4 和 5 行中省略 ROWS 和 COLUMNS。

于 2013-05-03T18:19:01.463 回答