C程序二维数组字符值输出为2个字符

C程序二维数组字符值输出为2个字符,c,arrays,multidimensional-array,type-conversion,C,Arrays,Multidimensional Array,Type Conversion,我想用二维数组显示输出。我打印10,11,12的值,但只显示一个数字0,1,2。不知道。如何使用char数据类型输出。我不想更改char值,因为我需要将另一个X和Y分配给数字[2][1]=“X” 我的代码在这里: #include <stdio.h> int main(void){ char number[3][4] = { {'1','2','3','4'}, {'5','6','7','8'}, {'9','10','11

我想用二维数组显示输出。我打印10,11,12的值,但只显示一个数字0,1,2。不知道。如何使用char数据类型输出。我不想更改char值,因为我需要将另一个X和Y分配给数字[2][1]=“X”

我的代码在这里:

#include <stdio.h>

int main(void){
    char number[3][4] = {
        {'1','2','3','4'},
        {'5','6','7','8'},
        {'9','10','11','12'}
    };

    printf("%c",number[2][1]);

    return 0;
}
#包括
内部主(空){
字符编号[3][4]={
{'1','2','3','4'},
{'5','6','7','8'},
{'9','10','11','12'}
};
printf(“%c”,编号[2][1]);
返回0;
}
所以。我希望你能帮我想想怎么做。
非常感谢你

您将字符与字符串混合,它们是不同的。在c语言中,单引号用于获取字符的ascii值,称为字符常量

当多个字符用单引号括起来时,它被称为多字符常量,其值由实现定义,但它仍然是一个整数而不是字符串

如果您想要一个字符串数组,那么它将是这样的

#include <stdio.h>

int main(void)
{
    const char *number[3][4] = {
        {"1",  "2",  "3",  "4"},
        {"5",  "6",  "7",  "8"},
        {"9", "10", "11", "12"}
    };
    printf("%s\n", number[2][1]);
    return 0;
}
#包括
内部主(空)
{
常量字符*编号[3][4]={
{"1",  "2",  "3",  "4"},
{"5",  "6",  "7",  "8"},
{"9", "10", "11", "12"}
};
printf(“%s\n”,编号[2][1]);
返回0;
}

还要注意的是,用
%s“
代替
%c”
来打印字符串。

将数字插入不带引号的数组中。
char
可以容纳从
-128到127的数字
并使用
%d
代替
%c

#包括
内部主(空){
字符编号[3][4]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
printf(“%d”,编号[2][2]);
返回0;

}
只需创建一个3D字符数组:

char number[3][4][3];
它允许
3
行和
4
列字符串,每个字符串的最大长度为
3
,包括空字节
\0

使用类似于
'11'
的内容是无效的,因为这不是
char
所要求的单个字符。您需要创建这些字符串,比如
“11”
,或者只使用
int
11
。如果决定使用字符串,则格式说明符必须是
%s
,因为您要打印出
char[]
char*
<代码>%c
用于打印
char

您的程序可以如下所示:

#include <stdio.h>

#define ROWS 3
#define COLS 4
#define STRSIZE 3

int main(void){
    char number[ROWS][COLS][STRSIZE] = {{"1","2","3","4"},
                                        {"5","6","7","8"},
                                        {"9","10","11","12"}};

    printf("%s",number[2][1]);

    return 0;
}
#包括
#定义第3行
#定义cols4
#定义STRSIZE 3
内部主(空){
字符数[行][COLS][STRSIZE]={{{“1”、“2”、“3”、“4”},
{"5","6","7","8"},
{"9","10","11","12"}};
printf(“%s”,编号[2][1]);
返回0;
}

注意:使用
const char*number[ROWS][COLS]
更灵活,因为您可以拥有任意长度的字符串。您还可以只声明一个二维整数数组,只需将
int number[ROWS][COLS]={{{1,2,3,4},…}

在C/C++语言中,char数据类型可以容纳-128到+127范围的值。该值可以存储为char c='A';或字符c=65;(使用单引号字符或字符的ASCII值)。因此不能将“10”存储在char变量中。如果需要存储ASCII值10(换行符“\n”),则可以使用@Sagar V的答案。如果需要存储文本10(“10”注释,不是单引号),则可以使用@Iharob Al-Asimi的答案

在代码中,您创建的是一个二维字符数组。它不能保存文本(字符串或字符*)值。只需查看编译器警告。练习写0个警告代码的习惯。

我建议

//如果字节不是 定义如此之短

   byte c[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

这种情况下的字符可能会令人困惑。

这段代码编译时没有出错吗?它显示了7条警告消息。多字符字符常量。为什么不尝试理解警告的含义?相关:。不能将10、11或12用作单个字符,因为它们不是。每个字符都是两个独立的字符。如果对你有用的话,你可以用A、B和C来代替它们。我不明白你问题的这一部分:“我需要将另一个X和Y分配给数字[2][1]=“X”;”谢谢你的好例子。任何其他没有指针的方法都可以打印此内容?@cyberoot只需声明一个3D字符数组即可。@cyberoot避免使用指针是毫无意义的,因为数组在许多情况下都像指针一样。要明确的是,
%c
char
值转换为ASCII表示形式并打印出来
%d
char
值(或任何其他整数基元类型)转换为数值的字符串表示形式。它们都可以用于
字符
,但具有不同的输出。在上面的代码中,如果使用%c,则不会打印任何内容。但是%d打印数字。