【问题标题】:Unexpected output when printing element of array in c在c中打印数组元素时出现意外输出
【发布时间】:2012-12-27 11:09:21
【问题描述】:

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

【问题讨论】:

    标签: c arrays


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    50'2'的ASCII码。

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

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

    如果您想保留这样的数组元素:'2',您需要将 printf 格式更改为 %c 以在控制台中获得 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' 结尾。这仅适用于字符数组。

    【讨论】:

      【解决方案4】:

      这一行

      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'};
      

      【讨论】:

        【解决方案5】:

        您分配的是字符而不是整数:

        注意

        '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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-10
          • 2020-09-22
          • 2020-07-20
          • 1970-01-01
          • 2014-10-04
          • 2021-10-12
          • 1970-01-01
          • 2015-11-24
          相关资源
          最近更新 更多