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