Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言处理数组_C_Arrays_Indexing - Fatal编程技术网

用C语言处理数组

用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

我只是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);


    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,请将代码添加到编译器选项中,直到它编译时没有警告,才接受代码。