“;错误:应为'''';或';)';在数值常量之前”;快到我的密码了

“;错误:应为'''';或';)';在数值常量之前”;快到我的密码了,c,C,我在尝试运行此c程序时遇到此错误: 该程序有两个以上的文件不会产生问题。 也许问题与定义无关?我可以做一个常数吗 头文件: #ifndef NUMBERGAME_H_ #define NUMBERGAME_H_ #define COLSIZE 4 #define ROWSIZE 5 void creatGameMatrix(int* mat, int ROWSIZE , int COLSIZE); void shuffleMatrix(int* mat, int ROWSIZE , int C

我在尝试运行此c程序时遇到此错误: 该程序有两个以上的文件不会产生问题。 也许问题与定义无关?我可以做一个常数吗

头文件:

#ifndef NUMBERGAME_H_
#define NUMBERGAME_H_
#define COLSIZE 4
#define ROWSIZE 5
void creatGameMatrix(int* mat,  int ROWSIZE , int COLSIZE);
void shuffleMatrix(int* mat, int ROWSIZE , int COLSIZE);
#endif /* NUMBERGAME_H_ */
文件:

#include <stdio.h>
#include "NumberGame.h"


//creat an ordered matrix N*M
void creatGameMatrix(int* mat, int ROWSIZE , int COLSIZE)
{
    int number = 1;
    for (int i = 0; i < ROWSIZE; ++i) {
        for (int j = 0; j < COLSIZE; ++j) {
            mat [i][j] = number++;
        }
    }
}

void shuffleMatrix(int* mat, int ROWSIZE , int COLSIZE)
{
    int row1, col1, row2, col2;
    do{
        row1 = 1 + rand() % (ROWSIZE) ;
        row2 = 1 + rand() % (ROWSIZE) ;
        col1 = 1 + rand() % (COLSIZE) ;
        col2 = 1 + rand() % (COLSIZE) ;
    }while (row1 == row2 || col1 == col2);

}
#包括
#包括“NumberGame.h”
//创建一个有序矩阵N*M
空矩阵(int*mat,int ROWSIZE,int COLSIZE)
{
整数=1;
对于(int i=0;i
错误指向ROWSIZE

#define COLSIZE 4
#define ROWSIZE 5
void creatGameMatrix(int* mat,  int ROWSIZE , int COLSIZE);
这毫无意义。它扩展到

void creatGameMatrix(int* mat,  int 5, int 4);
这显然是不对的(特别是函数参数名称必须是标识符,
4
5
不是标识符)。选项如下:

  • 不要传递参数并在例程中使用#定义
  • 将参数命名为
    rowsize
    colsize
    ,并在例程中使用这些参数。使用
    ROWSIZE
    COLSIZE
    定义在中传递值 这毫无意义。它扩展到

    void creatGameMatrix(int* mat,  int 5, int 4);
    
    这显然是不对的(特别是函数参数名称必须是标识符,
    4
    5
    不是标识符)。选项如下:

  • 不要传递参数并在例程中使用#定义
  • 将参数命名为
    rowsize
    colsize
    ,并在例程中使用这些参数。使用
    ROWSIZE
    COLSIZE
    定义在中传递值
    不能声明名为
    ROWSIZE
    的函数参数,因为
    ROWSIZE
    是一个#定义。预编译器将用5替换
    ROWSIZE
    COLSIZE
    也是如此,它使标题成为
    void shuffleMatrix(int*mat,int 5,int 4)。这不是有效的代码


    由于您已经定义了它们,您可以将它们作为参数删除到函数中,因为它们可以在该文件中的任何位置使用。

    您不能声明名为
    ROWSIZE
    的函数参数,因为
    ROWSIZE
    是一个定义。预编译器将用5替换
    ROWSIZE
    COLSIZE
    也是如此,它使标题成为
    void shuffleMatrix(int*mat,int 5,int 4)。这不是有效的代码


    由于您已经定义了它们,您可以将它们作为参数删除到函数中,因为它们可以在该文件中的任何位置使用。

    您不能将这些宏用作函数参数的名称。宏展开后,您将得到:

    void creatGameMatrix(int* mat,  int 5 , int 4);
    void shuffleMatrix(int* mat, int 5 , int 4);
    
    这毫无意义——函数参数必须是有效的变量名,而不是数字

    为函数参数使用不同的名称,然后在调用函数时使用宏

    void creatGameMatrix(int* mat,  int rowsize , int colsize);
    void shuffleMatrix(int* mat, int rowsize , int colsize);
    
    或者您可以完全忽略这些参数:

    void creatGameMatrix(int* mat);
    void shuffleMatrix(int* mat);
    

    不能将这些宏用作函数参数的名称。宏展开后,您将得到:

    void creatGameMatrix(int* mat,  int 5 , int 4);
    void shuffleMatrix(int* mat, int 5 , int 4);
    
    这毫无意义——函数参数必须是有效的变量名,而不是数字

    为函数参数使用不同的名称,然后在调用函数时使用宏

    void creatGameMatrix(int* mat,  int rowsize , int colsize);
    void shuffleMatrix(int* mat, int rowsize , int colsize);
    
    或者您可以完全忽略这些参数:

    void creatGameMatrix(int* mat);
    void shuffleMatrix(int* mat);
    

    如果
    ROWSIZE
    COLSIZE
    是固定的,那么您可能不需要将它们传递给函数。只需删除
    int ROWSIZE、int COLSIZE
    参数。如果
    ROWSIZE
    COLSIZE
    是固定的,则可能不需要将它们传递给函数。只需删除
    int ROWSIZE,int COLSIZE
    参数。我将其更改为有效变量名称我将其更改为有效变量名称