【问题标题】:How to print a 2d array with a function in C?如何在 C 中使用函数打印二维数组?
【发布时间】:2013-01-29 00:48:01
【问题描述】:

我正在尝试使用函数打印二维数组,但我不断收到错误 "pointer expected"

我正在尝试制作一个战舰类型的网格。我可以打印出坐标行和列,但实际上我根本无法打印二维数组(每个元素中都包含“.”)。

任何帮助将不胜感激,我对此很陌生。谢谢! :)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int length;
int width;
int i;
int j;
char invisible_board;


void board_setup(int *rows, int *columns){
    char *invisible_board[*rows][*columns];
char *player_board[*rows][*columns];

for (i = 0; i < *rows; i++){
    for (j = 0; j < *columns; j++){
        invisible_board[i][j] = ".";    //Sets all elements in hidden board to water
    }       
}

for (i = 0; i < *rows; i++){
    for (j = 0; j < *columns; j++){
        player_board[i][j] = ".";
    }
}
}

void display(int *rows, int *columns, char *invisible_board){

printf("   ");
for (i=1; i < *rows +1;i++){
    printf("%d  ",i);
}
printf("\n");                       //Prints top row of co-ordinates

for (i=1; i < *columns+1;i++){
    printf("%d ",i);
    for (j=0;j < *columns;j++){         //Prints left column of co-    ordinates and rows of game board
            printf(" %c ",invisible_board[i-1][j]);
        }
        printf("\n");
        }

}

int main(void){

    printf("Please enter the amount of rows in your board\n");
    scanf("%d",&length);
    printf("Please enter the amount of columns in your board\n");
    scanf("%d",&width);

    board_setup(&length,&width);
    display(&length,&width,&invisible_board);

    return (0);
}

【问题讨论】:

  • 你的程序有很多问题,包括你用board_setup中的一个局部变量来隐藏全局invisible_board。我认为您在这里有一些基本的理解问题。当然,打印并不是唯一出错的地方。一个好的开始将是更好的格式。之后,尝试在调试器中加载代码并单步执行。这将帮助您发现一些问题。特别是,您可能应该阅读the "arrays and pointers" section of the C FAQ
  • 与此同时,我将投票以“不是一个真正的问题”结束,因为我认为这个问题不能以目前的形式回答。从样式和格式到语言的基本问题,出错的地方太多了。我不知道堆栈溢出是一个对程序进行完整重构和大修的好地方,即使是这么大。您可能会受益于测试您的程序的较小部分并在这里提出有关它们的问题,然后再继续进行如此复杂的事情。
  • @CarlNorum 还不错,除了没有真正的空间来存储电路板并使用字符串文字而不是字符文字......当然,它不是好的代码,但不是很难让它成为工作代码。
  • 不过,您的示例取消了动态分配。而且他还不必要地通过引用传递了一堆参数。 rowscolumns 在一些地方也互换了。
  • @CarlNorum 我没有取出任何动态分配,我只是把它作为评论,以便它可以作为未来的扩展,是的,它的代码很糟糕,但它并不是真的重要的是,现阶段人们的第一步是让他们的代码进入工作状态,然后他们可以使用它:) 它显然不是生产代码!我希望......请......请不要让它成为生产代码。

标签: c arrays function printing 2d


【解决方案1】:

这是我可以对您的代码进行的最简单的更改,以使您可以使用代码......现在......这还不是好的代码。但让你开始。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int length;
int width;
int i;
int j;
char invisible_board[100][100];   // dynamically allocate....
char player_board[100][100];   // dynamically allocate....


void board_setup(int *rows, int *columns){  
    for (i = 0; i < *rows; i++){
        for (j = 0; j < *columns; j++){
            invisible_board[i][j] = '.';    //Sets all elements in hidden board to water
        }       
    }

    for (i = 0; i < *rows; i++){
        for (j = 0; j < *columns; j++){
            player_board[i][j] = '.';
        }
    }
}

void display(int *rows, int *columns){

    printf("   ");
    for (i=1; i < *rows +1;i++){
        printf("%d  ",i);
    }
    printf("\n");                       //Prints top row of co-ordinates

    for (i=1; i < *columns+1;i++){
        printf("%d ",i);
        for (j=0;j < *columns;j++){         //Prints left column of co-    ordinates and rows of game board
            printf(" %c ",invisible_board[i-1][j]);
        }
        printf("\n");
    }

}

int main(void){

    printf("Please enter the amount of rows in your board\n");
    scanf("%d",&length);
    printf("Please enter the amount of columns in your board\n");
    scanf("%d",&width);

    board_setup(&length,&width);
    display(&length,&width);

    return (0);
}

【讨论】:

    猜你喜欢
    • 2022-12-04
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多