我正在创建一个简单的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;
}
答案 0 :(得分:8)
您使用ascii character codes初始化了数组。 '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
格式说明符。)
答案 1 :(得分:3)
50
是'2'
的ASCII码。
如果您想要修复,请将'2'
替换为2
。
当使用像'2'
这样的字符文字时,C实际上认为它们是整数类型。当您使用%d
格式说明符打印它时,您告诉C将值打印为整数。
如果你想保留这样的数组元素:'2'
,你需要将printf格式更改为%c
以在控制台中获得2
。
答案 2 :(得分:3)
当您编写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'
结尾。这仅适用于字符数组。
答案 3 :(得分:1)
这一行
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'};
答案 4 :(得分:1)
您指定的字符不是整数:
注意
'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;
}