用C语言处理数组
我只是C语言的初学者 我想确定数组的元素,但失败了。 我想插入索引row=x,column=y。这可能吗 这是我的密码用C语言处理数组,c,arrays,indexing,C,Arrays,Indexing,我只是C语言的初学者 我想确定数组的元素,但失败了。 我想插入索引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); co
#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;
}
在哪里␠ 是一个空间
我认为coords[x][y]='O';这是个问题,但我无法解决 您还没有像您想的那样初始化coords数组!该行: 字符坐标[3][3]={NULL}; 实际上,所有9个元素的值都为零,这是nul不可打印字符。如果列表中的初始值设定项少于数组元素,则所有“额外”元素的值都将为零 <>你想把所有9个元素设置成空白空间是: 字符坐标[3][3]={{{'','','','},{'','','',},{'','','','','','}; 或者类似的东西,例如,如果您知道您的系统使用的是ASCII编码,则使用ASCII值作为空格32 最好将所需的初始值定义为常量,然后将其用作初始值设定项: const char X=''; char-coords[3][3]={{X,X,X},{X,X},{X,X,X};
因为这样,如果您需要使用不同的初始字符,就可以更轻松地更改内容,而不必键入其他字符。您还没有像您所想的那样初始化coords数组!该行: 字符坐标[3][3]={NULL}; 实际上,所有9个元素的值都为零,这是nul不可打印字符。如果列表中的初始值设定项少于数组元素,则所有“额外”元素的值都将为零 <>你想把所有9个元素设置成空白空间是: 字符坐标[3][3]={{{'','','','},{'','','',},{'','','','','','}; 或者类似的东西,例如,如果您知道您的系统使用的是ASCII编码,则使用ASCII值作为空格32 最好将所需的初始值定义为常量,然后将其用作初始值设定项: const char X=''; char-coords[3][3]={{X,X,X},{X,X},{X,X,X}; 因为这样,如果您需要使用不同的初始字符,就可以更轻松地更改内容。首先:
char coords[3][3] = { NULL };
虽然编译器很可能会编译代码并将所有元素初始化为零,但NULL在这里没有什么意义。让我们把它改成更正确的:
char coords[3][3] = { { 0 } };
未显式初始化的数组元素被初始化为0。作为参考,你可以阅读
现在我们知道所有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");
}
或者,您可以按照另一个答案中的建议将所有数组元素初始化为“”字符。首先:
char coords[3][3] = { NULL };
虽然编译器很可能会编译代码并将所有元素初始化为零,但NULL在这里没有什么意义。让我们把它改成更正确的:
char coords[3][3] = { { 0 } };
未显式初始化的数组元素被初始化为0。作为参考,你可以阅读
现在我们知道所有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");
}
或者,您可以按照另一个答案中的建议将所有数组元素初始化为“”字符。您认为为什么应该打印\n?您是否在任何地方打印了F\\n?代码现在打印的是什么?您的初始化有点奇怪,NULL是指针的值。要将数组元素初始化为0,do={{0};。未显式初始化的数组元素将在char coords[3][3]={NULL}中自动初始化为0.NULL;毫无意义。在我的编译器上,它最终用NUL字符0填充数组。绝对没有理由相信它会像您所期望的那样填充空间!重新编辑时,如果只需要一个字符,为什么每个数组元素打印两个字符%c…除非检查返回值,否则无法正确使用scanf。例如,如果扫描%d%d、&x、&y!=2{fputs错误:无效的整数输入。\n,stderr;返回1;}并启用编译器警告-对于VS add/W3,请将代码添加到您的编译器选项中,并且在编译之前不接受代码,而不显示警告。您认为\n为什么应该打印?您是否在任何地方打印了F\\n?代码现在打印的是什么?您的初始化有点奇怪,NULL是指针的值。要将数组元素初始化为0,do={{0};。未显式初始化的数组元素将在char coords[3][3]={NULL}中自动初始化为0.NULL;毫无意义。在我的编译器上,它最终用NUL字符0填充数组。绝对没有理由相信它会像您所期望的那样填充空间!重新编辑时,如果只需要一个字符,为什么每个数组元素打印两个字符%c…除非检查返回值,否则无法正确使用scanf。例如,如果扫描%d%d、&x、&y!=2{fputs错误:无效的整数输入。\n,stderr;返回1;}并启用编译器警告-对于VS add/W3,请将代码添加到编译器选项中,直到它编译时没有警告,才接受代码。