我得到以下警告,我相信这些警告会阻止任何内容的打印: 当我调用函数和“期望的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);
答案 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);
}