Массив символов не читается должным образом - PullRequest
0 голосов
/ 02 мая 2020

Я не знаю, почему значения в этих индексах массива не отображаются должным образом

       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]);

В результате получается эта вещь и некоторые другие странные символы

> !|!|!
  !|!|

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Ваша программа имеет две проблемы:

  1. Индексирование массива начинается с 0, а не 1. Единственным исключением является определение количества элементов, которые должны храниться в определенном измерении при объявлении tris.

При использовании 3 для любого измерения вы вызываете неопределенное поведение, потому что вы пытаетесь для чтения из местоположений вне 2D-массива.

Скорее используйте:

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]);
}

Вывод:

33|33|33
33|33|33
33|33|33

Примечание:

Если tris не имеет явного намерения символа, вы должны объявить его как тип int[][] вместо char[][]:

int tris[3][3]= {
                   {33, 33, 33,},
                   {33, 33, 33,},
                   {33, 33, 33,}
                };
1 голос
/ 02 мая 2020

Правильно, уже был правильный ответ. Индекс начинается с 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 в char? Или ты хотел 33?

...