Ваша программа имеет две проблемы:
- Индексирование массива начинается с
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,}
};