我正在创建一个简单的 c 程序,下面程序的输出应该是 2 但我得到 50 不知道为什么(我是 c 的新手)请让我知道我在哪里失踪
#include<stdio.h>
int main(int argc, char** argv) {
int a[4]={'1','2','2','\0'};
printf("The value of a is %d",a[1]);
return 0;
}
您使用ascii 字符代码初始化了数组。 '2'
具有整数值 50。
将数组初始化为
int a[4]={1,2,2,0};
如果您希望它包含整数 1,2,2,0。或者
#include<stdio.h>
int main(int argc, char** argv) {
char a[4]="121";
printf("The value of a is %c",a[1]);
return 0;
}
如果您想要一个可以被视为字符串的字符数组。(请注意%c
此处使用格式说明符。)
当您编写时,int a[4]={'1','2','2','\0'};
您实际上使用数字 1 和 2 的 ASCII 代码初始化了数组。这是因为您将它们括在单引号中,从而使它们成为字符而不是整数。因此,数组实际上采用了值int a[4]={49,50,50,0};
来纠正它,您应该编写不带引号的整数:
int a[4]={1,2,2,0};
另请注意,整数数组不需要以'\0'
. 这仅适用于字符数组。
50
是 的 ASCII 码'2'
。
如果您想修复它,请替换'2'
为。2
当使用像 C 这样的字符文字时,'2'
实际上将它们视为整数类型。当您使用%d
格式说明符打印它时,您是在告诉 C 将值打印为整数。
如果要保留这样的数组元素:'2'
,则需要将 printf 格式更改为在控制台%c
中获取 a 。2
这条线
int a[4]={'1','2','2','\0'};
告诉编译器创建一个长度为 4 的整数数组,并将右侧花括号中的整数放入其中。
中的字符C
是1字节整数,1
是一个字符,1
表示它的ASCII码的整数值,即50。所以数组的第一个元素的值是50。
要修复你应该写
int a[4]={1,2,2,0};
请记住,它0
不能用作数组结束标记,因为它只是一个数字。
如果你想得到122
输出然后做
char a[4]={'1','2','2','\0'};
printf("The value of a is %s",a);
因为字符串C
是带有0
终止符号的字符数组。
您也可以让编译器为您计算值
char a[]={'1','2','2','\0'};
您分配的是字符而不是整数:
笔记
'2' means char use %c
2 manes int use %d
"2" means string. use %s
都是不同的:
在您的代码中,您可以打印 2:
int main(int argc, char** argv) {
char a[4]={'1','2','2','\0'};
printf("The value of a is %c",a[1]);
return 0;
}