在C中处理数组

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

我只是C语言的初学者。

我想确定数组的元素,但是失败了。我想插入index(row = x,column = y)。这可能吗?

这是我的代码。

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main(void)
{
    int x, y;
    char coords[3][3] = { NULL };

    printf("x, y: ");
    scanf("%d %d", &x, &y);


    coords[x][y] = 'O';




    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
            printf("%c ", coords[i][j]);
        printf("\n");
    }

    return 0;
}

如果x = 2,y = 2,我希望结果会打印出来

␠␠␠
␠␠␠
␠␠O

((␠是空格)

我认为是coords[x][y] = 'O';是问题,但我无法解决。

c arrays indexing
2个回答
0
投票

您可能没有想到的那样尚未初始化coords数组!该行:

char coords[3][3] = { NULL };

实际上为所有9个元素赋予zero的值-这是nul(不可打印)字符。 (如果列表中的初始化程序少于数组元素,则所有“额外”元素的值都为零。)

您可能想要的(将所有9个元素设置为空白)是:

char coords[3][3] = { {' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '} };

或类似的东西,例如,如果您知道系统使用ASCII编码(不是[[强制的话),请使用ASCII值作为空格(32)。

最好将所需的初始值定义为常量,然后将其用作初始化程序:

const char X = ' '; char coords[3][3] = { {X, X, X}, {X, X, X}, {X, X, X} };

因为这样可以更轻松地更改内容(减少打字),如果您需要使用其他的初始字符。

0
投票
第一:

char coords[3][3] = { NULL };

NULL在这里意义不大,尽管编译器很可能会编译代码并将所有元素初始化为零。让我们将其修复为更“正确”的东西:

char coords[3][3] = { { 0 } };

未显式初始化的数组元素将初始化为0。作为参考,您可以阅读array initialization on cppreference

现在,我们知道所有out数组元素都是使用0初始化的。因此,您可以在打印之前检查它们:

for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (coords[i][j] == 0) { printf(" "); } else { printf("%c", coords[i][j]); } printf(" "); } printf("\n"); }

或者,您也可以按照其他答案中的建议将所有数组元素初始化为' '字符。
© www.soinside.com 2019 - 2024. All rights reserved.