调用函数时,为什么会出现这些错误?

时间:2020-03-07 22:37:09

标签: c

我得到以下警告,我相信这些警告会阻止任何内容的打印: 当我调用函数和“期望的char(*)[26]但参数的类型为'char'”时,“传递'printboard'的参数1使指针从整数而不进行强制转换”在第2行。

#include <stdio.h>
void printBoard(char board[26][26], int n){
int i,j,k;

if (i=0){
        for (j=1;j<n;j++){
        for (k=1;k<n;k++){
            board[i][j]=k;
        }
        printf("%c", k+96);
    }
}

if (j=0){
for(i=1;i<n;i++){
    for(k=1;k<n;j++){
        board[i][j]=k;
        printf("%c", k+96);
    }
}    
}

for (i=1;i<=n;i++){
    for (j=1;j<=n;j++){
        if (board[i][j]!=board[n/2][n/2]&&board[i][j]!=board[(n/2)+1][(n/2)+1]&&board[i][j]!=board[n/2][(n/2)+1]&&board[i][j]!=board[(n/2)+1][n/2]){
            board[i][j]='U';
        }
        else if (board[i][j]==board[n/2][n/2]&&board[i][j]==board[(n/2)+1][(n/2)+1]){
            board[i][j]='W';
        }
        else {
            board[i][j]='B';
        }
    }
    printf("%c", board[i][j]);
}
//n is even
return;
}


int main(void)
{
const char board[26][26];
int dim;
char boardConfig;
printf("Enter the board dimension: \n");
scanf("%d", &dim);   

printBoard(board[26][26],dim);

2 个答案:

答案 0 :(得分:1)

board[26][26]是一个char元素(超出范围)。您要传递整个2D阵列板:

printBoard(board,dim);

(另:检查scanf的返回码,并检查dim是否在1-26范围内,以避免未定义的行为)

并在初始化board[i][j]=k;时添加一些ASCII偏移量(例如:board[i][j]=k+'a';)。否则,您的代码将在末尾输出非ASCII字符。

答案 1 :(得分:1)

您需要将其转换为参数类型。您的代码中存在许多错误-例如赋值运算符,而不是比较运算符。 if(i=0)应该是if(i==0),依此类推。我已经编译并运行了代码,不确定您要做什么,但这应该可以工作:

#include <stdio.h>
void printBoard(char board[26][26], int n){
int i = 0;
int j = 0;
int k = 0;

if (i==0){
        for (j=1;j<n;j++){
        for (k=0;k<n;k++){
            board[i][j]=k;
        }
        printf("%c", k+96);
    }
}

if (j==0){
for(i=1;i<n;i++){
    for(k=0;k<n;k++){
        board[i][j]=k;
        printf("%c", k+96);
    }
}    
}

for (i=1;i<=n;i++){
    for (j=1;j<=n;j++){
        if (board[i][j]!=board[n/2][n/2]&&board[i][j]!=board[(n/2)+1][(n/2)+1]&&board[i][j]!=board[n/2][(n/2)+1]&&board[i][j]!=board[(n/2)+1][n/2]){
            board[i][j]='U';
        }
        else if (board[i][j]==board[n/2][n/2]&&board[i][j]==board[(n/2)+1][(n/2)+1]){
            board[i][j]='W';
        }
        else {
            board[i][j]='B';
        }
    }
    printf("%c", board[i][j]);
}
//n is even
return;
}


int main(void)
{
const char board[26][26];
int dim;
char boardConfig;
printf("Enter the board dimension: \n");
scanf("%d", &dim);   

printBoard((char (*)[26])board,dim);
}