C错误:预期';'或','或")'?

时间:2013-05-03 17:39:23

标签: c compiler-errors

我发现我的代码没有任何问题,但编译器一直在抱怨我。它说错误: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;

     }

} }

5 个答案:

答案 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。