结构中的2D数组

问题描述 投票:0回答:2

我在c编程和家庭作业我正在创建一个战舰游戏。我已经为电路板(对手板和我的电路板)创建了一个结构,但我需要一个2D数组用于电路板。这就是我到目前为止所拥有的

struct Board
{
        char board[10][10];
        int carrierHits;
        int battleshipHits;
        int destroyerHits;
        int subHits;
        int patrolHits;
};
int initializedBoard() //changed from"myBoard" to "initializedBoard"
{
        struct Board myBoard;
}

我需要初始化电路板以获得所有*,这就是我将其声明为char类型的原因。我在想,也许我可以使用for循环来使电路板由*组成,但我不知道如何去做,因为电路板[i] [j]不起作用,因为没有分配内存。我真的很困惑如何完成这项任务。我稍后会将失误和命中改为O和X。请帮我理解这个。

c arrays multidimensional-array struct
2个回答
1
投票

我不太了解C,但这似乎有效:

#include <stdio.h>
#include <string.h>

#define ROWS 10
#define COLUMNS 10

struct Board
{
    char board[ROWS][COLUMNS];
    int carrierHits;
    int battleshipHits;
    int destroyerHits;
    int subHits;
    int patrolHits;
};

struct Board myboard;

void initializeBoard(struct Board* board)
{
    memset(board->board, '*', ROWS * COLUMNS);
}

void fireAt(int row, int column)
{
    myboard.board[row][column] = '0';
}

int main()
{
    initializeBoard(&myboard);
    fireAt(4, 5);
    fireAt(4, 6);
    fireAt(4, 7);

// SHOW THE BOARD
        for (int i = 0; i < 10; ++i)
        {
            for (int j = 0; j < 10; ++j)
                printf(" %c", myboard.board[i][j]);
            printf("\n");
        }

    return 0;
}

我不知道你的意思

“由于没有分配内存,所以board [i] [j]不起作用。”

当您使用struct Board myboard创建Board实例时,myboard已为Board结构分配了内存,包括10 x 10个字符。你只需要分配内存,而不是你有一个指针的数组,但内存是为数组分配的。

您也可以使用循环而不是memset初始化电路板。


1
投票

我需要初始化电路板以获得所有*,这就是为什么我宣称它是char类型。我可以使用for循环来使电路板由*组成。

使您的功能通用,以便它们可以为您和对手板工作。避免全局变形。

下面给出的函数initializeBoard可以将boardstructure Board初始化为任何char值。如果你改变主意并且决定用任何其他值替换'*',那么所有需要的就是改变参数。

void initializeBoard(struct Board* board, char c);

board [i] [j]不起作用,因为没有分配内存。

只要你创建struct Board结构(无论是在堆栈上还是在堆上动态),board[ROWS][COLUMNS]将拥有内存来保存其数据。通过创建struct Board结构,结构的所有元素都将获得所需的内存。

我稍后会将失误和命中改为O和X

您将需要一个set函数来更改特定电路板单元的内容。

这可以通过以下方式完成:

void setCell(struct Board* board, int row, int column, char c);

所有你需要的是提供qazxsw poi,qazxsw poi,qazxsw poi坐标和值board放置在板上适当的位置。

您很可能需要一个函数来检查在给定坐标下您有什么。这可以通过以下方式完成:

row

看看提出的简单程序。

祝你的节目顺利。通往完美程序王国的道路是漫长的,但总是从第一步开始。

column

输出:

c
© www.soinside.com 2019 - 2024. All rights reserved.