0

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

这是实时输出

4

5 回答 5

8

您使用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此处使用格式说明符。)

于 2012-12-27T11:11:08.303 回答
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'. 这仅适用于字符数组。

于 2012-12-27T11:23:35.050 回答
3

50是 的 ASCII 码'2'

如果您想修复它,请替换'2'为。2

当使用像 C 这样的字符文字时,'2'实际上将它们视为整数类型。当您使用%d格式说明符打印它时,您是在告诉 C 将值打印为整数。

如果要保留这样的数组元素:'2',则需要将 printf 格式更改为在控制台%c中获取 a 。2

于 2012-12-27T11:11:13.417 回答
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'};
于 2012-12-27T11:19:40.297 回答
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;
}
于 2012-12-27T11:19:53.573 回答