我只是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';
是问题,但我无法解决。
您可能没有想到的那样尚未初始化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} };
因为这样可以更轻松地更改内容(减少打字),如果您需要使用其他的初始字符。
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"); }
或者,您也可以按照其他答案中的建议将所有数组元素初始化为' '
字符。