C 数组字符读取不正确

C 数组字符读取不正确,c,arrays,character,C,Arrays,Character,我不知道为什么这些数组索引的值没有正确显示 char tris[3][3]={ {33, 33, 33,}, {33, 33, 33,}, {33, 33, 33,}}; printf("%c|%c|%c\n", tris[1][1], tris[1][2], tris[1][3]); printf("%c|%c|%c\n", tris[2][1], tris[2][2],

我不知道为什么这些数组索引的值没有正确显示

       char tris[3][3]={
           {33, 33, 33,},
           {33, 33, 33,},
           {33, 33, 33,}};
           printf("%c|%c|%c\n", tris[1][1], tris[1][2], tris[1][3]);
           printf("%c|%c|%c\n", tris[2][1], tris[2][2], tris[2][3]);
           printf("%c|%c|%c\n", tris[3][1], tris[3][2], tris[3][3]);
输出是这个东西和其他一些奇怪的字符

> !|!|!
  !|!|

正确,已经有了正确的答案。索引从0开始

   char tris[3][3]={
       {33, 33, 33,},
       {33, 33, 33,},
       {33, 33, 33,}};
       printf("%c|%c|%c\n", tris[0][0], tris[0][1], tris[0][2]);
       printf("%c|%c|%c\n", tris[1][0], tris[1][1], tris[1][2]);
       printf("%c|%c|%c\n", tris[2][0], tris[2][2], tris[2][2]);
       }

顺便问一下:你是不是故意在字符中写了一个int 33?还是你想要“33”

您的程序有两个问题:

  • 数组索引从
    0
    开始,而不是从
    1
    开始。唯一的例外是,在声明
    tris
    时,在某一维度中要保留的元素数量的定义
  • 通过对任何维度使用
    3
    ,您可以调用未定义的行为,因为您试图从二维数组之外的位置读取

    而是使用:

    printf("%c|%c|%c\n", tris[0][0], tris[0][1], tris[0][2]);
    printf("%c|%c|%c\n", tris[1][0], tris[1][1], tris[1][2]);
    printf("%c|%c|%c\n", tris[2][0], tris[2][1], tris[2][2]);
    
  • “输出是这个东西和一些奇怪的字符。”

  • 这是因为ASCII数字
    33
    对应于
    “!”字符

    如果要打印整数
    33
    ,则应使用
    %d
    转换说明符来打印整数值,而不是
    %c
    转换说明符来打印
    printf()
    调用中的实际字符


    修正程序:

    #include <stdio.h>
    
    int main(void)
    {
       char tris[3][3]= {
                          {33, 33, 33,},
                          {33, 33, 33,},
                          {33, 33, 33,}
                        };
    
       printf("%d|%d|%d\n", tris[0][0], tris[0][1], tris[0][2]);
       printf("%d|%d|%d\n", tris[1][0], tris[1][1], tris[1][2]);
       printf("%d|%d|%d\n", tris[2][0], tris[2][1], tris[2][2]);
    }
    

    旁注:

    如果
    tris
    没有明确的字符意图,则应将其声明为
    int[][]
    类型,而不是
    char[][]

    int tris[3][3]= {
                       {33, 33, 33,},
                       {33, 33, 33,},
                       {33, 33, 33,}
                    };
    

    数组是0基索引的。因此范围从0到2,而不是1到3
    '33'
    的值超过了
    char
    的范围。不太可能是我想要的,是的。我只是想检查一下,抱歉搞混了。
    int tris[3][3]= {
                       {33, 33, 33,},
                       {33, 33, 33,},
                       {33, 33, 33,}
                    };