简体   繁体   English

将数组作为参数C传递

[英]passing an array as an argument C

I was wondering if you could tell me what I am doing wrong. 我想知道你能否告诉我我做错了什么。 Here is a small fragment of a battleship game I'm working on, it's supposed to show two clear arrays filled with the "=" symbol, but all I'm getting is a mess. 这是我正在研究的一艘战舰游戏的一小部分,应该显示两个清晰的数组,其中填充了“ =”符号,但我得到的只是一团糟。

#include <stdio.h>
int p_ship_count;
int e_ship_count;
#define EMPTY 0
#define BORDER 2
#define SHIP 1
#define HIT 4
#define MISS 3
#define SHOW 5

void print_boards(char *message,int e_board[][12],int p_board[][12])
{
    int i;
    int v,q;
    printf("\t    A B C D E F G H I J\n");
    for(i=0,v=10,q=0;i<100;++i)
    {
        if(v==10)
        {
            if(q<9) printf("\n\t %i  ", ++q);
            else printf("\n\t%i  ", ++q);
            v=0;
        }
        ++v;
        if(e_board[v][q] == EMPTY) printf("= ");
        if(e_board[v][q] == SHIP) printf("O ");
        if(e_board[v][q] == BORDER) printf("+ ");
        if(e_board[v][q] == MISS) printf("+ ");
        if(e_board[v][q] == HIT) printf("@ ");
    }
    printf("\n\n\tenemy %i\n\t------------------------\n\tplayer %i\n\n\t    A B C D E F G H I J\n",e_ship_count,p_ship_count);
    for(i=0,v=10,q=0;i<100;++i)
    {
        if(v==10)
        {
            if(q<9) printf("\n\t %i  ", ++q);
            else printf("\n\t%i  ", ++q);
            v=0;
        }
        ++v;
        if(p_board[v][q] == EMPTY) printf("= ");
        if(p_board[v][q] == SHIP) printf("O ");
        if(p_board[v][q] == BORDER) printf("+ ");
        if(p_board[v][q] == MISS) printf("+ ");
        if(p_board[v][q] == HIT) printf("@ ");
        if(p_board[v][q] == SHOW) printf("X ");
    }
    printf("\n\n\t");
    for(i=0;message[i]!='\0';++i)
    {
        printf("%c",message[i]);
    }
    printf("\n\n");
}


int main()
{
    int e_board[12][12];
    int p_board[12][12];
    print_boards("",e_board,p_board);
    return 0;
}

Initialize everything to zero in the beginning. 首先将所有内容初始化为零。 I think you can also allocate the array with some C-function like calloc or something that does the initialization to 0 for you, but I forgot at the moment. 我认为您也可以为数组分配一些C函数,例如calloc或为您执行初始化为0的操作,但此刻我忘记了。

int main()
{
    int i=0; int j=0;
    int e_board[12][12];
    int p_board[12][12];
    for(i=0; i < 12; i++){
        for(j=0; j < 12; j++){
           e_board[i][j] = 0;
           p_board[i][j] = 0;
        }
    }
    print_boards("",e_board,p_board);
    return 0;
}

Having this as main function, the programm prints out properly all "=" 以此为主要功能,程序可以正确打印所有“ =”

        A B C D E F G H I J

     1  = = = = = = = = = =
     2  = = = = = = = = = =
     3  = = = = = = = = = =
     4  = = = = = = = = = =
     5  = = = = = = = = = =
     6  = = = = = = = = = =
     7  = = = = = = = = = =
     8  = = = = = = = = = =
     9  = = = = = = = = = =
    10  = = = = = = = = = =

    enemy 0
    ------------------------
    player 0

        A B C D E F G H I J

     1  = = = = = = = = = =
     2  = = = = = = = = = =
     3  = = = = = = = = = =
     4  = = = = = = = = = =
     5  = = = = = = = = = =
     6  = = = = = = = = = =
     7  = = = = = = = = = =
     8  = = = = = = = = = =
     9  = = = = = = = = = =
    10  = = = = = = = = = =

If you didn't initialize the arrays properly, you'd get random data trash and it would print something like 如果您未正确初始化数组,则会得到随机数据垃圾,它会打印类似

        A B C D E F G H I J

     1
     2
     3  +
     4  = = =
     5  =
     6  =
     7
     8  @
     9  @ =
    10  @ = =

    enemy 0
    ------------------------
    player 0

        A B C D E F G H I J

     1  = =
     2  = = O =
     3  = = =
     4  = =
     5  = = = =
     6  = = = =
     7  = = = =
     8  = =
     9  = = + = =
    10  = = = = =

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM