在c中打印数组元素时出现意外输出

时间:2012-12-27 11:09:21

标签: c arrays

我正在创建一个简单的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;
}

here is live output

5 个答案:

答案 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字节整数,11的字符,它表示它的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;
}