【问题标题】:Printing arrays in C在 C 中打印数组
【发布时间】:2013-09-23 22:28:12
【问题描述】:

我刚刚开始学习 C,所以我非常糟糕,因为我来自基本的 Python。我正在尝试使用 for 循环打印数组中的元素,但它的输出方式不正确。

#include <stdio.h>
#include <math.h>
int main()
{
  int array[]={0,1,2,3,4};
  int i;
  for (i=0;i<5;i++);
  {
      printf("%d",array[i]);
  }
  printf("\n");
}

我的输出是

134513952

我不知道为什么要打印这个。

【问题讨论】:

  • 你不需要&lt;math.h&gt;。您可能希望将数字彼此分开(空格或%2d 或其他东西)。而且您绝对不希望访问超出数组范围 - for 后面的分号表示您正在访问超出范围的 array[5]
  • 删除多余的分号后,输出应该是01234,难以阅读。您可能希望将格式字符串从 "%d" 更改为 " %d",以便将数字挤在一起。

标签: c arrays printing


【解决方案1】:

你有一个额外的分号。

 for (i=0;i<5;i++);
                  ^
                  |
        here -----+

那个分号意味着你的 for 循环有一个空的主体,你最终在循环完成后打印,相当于:

printf("%d", array[5]);

由于该值超出了数组的末尾,您会得到未定义的行为和一些奇怪的输出。

编者注:您应该研究能够提供更好警告的编译器。例如,Clang 会发出此警告,即使没有传递特殊标志:

example.c:7:20: warning: for loop has empty body [-Wempty-body]
  for (i=0;i<5;i++);
                   ^
example.c:7:20: note: put the semicolon on a separate line to silence this
      warning

【讨论】:

    【解决方案2】:

    跳过for循环中的分号:

    for (i=0;i<5;i++);
    

    根据您的逻辑,您不需要在 for 循环后使用分号。

    由于分号,for 循环被评估 5 次,当它到达 printf 时,i 的值是 5。现在,尝试访问数组中的索引 5 会给你一个未知值,因为您仅使用 5 个值初始化了数组。如果您要在 printf 语句中打印 i 的值,这会变得更清楚:

      for (i=0;i<5;i++);
      {
         printf("i: %d \t Val: %d",i, array[i]);
      }
    

    会给你一个输出,例如:

    i: 5     Val: 32767
    

    【讨论】:

      【解决方案3】:

      for 循环后的分号是问题所在。 在打印一些随机数之前,因为存储类是自动的。

      #include <stdio.h>
      #include <math.h>
      int main()
      {
        int array[]={0,1,2,3,4};
        int i;
        for (i=0;i<5;i++);
        {
            printf("%d",array[i]);
        }
        printf("\n");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-24
        • 2014-05-20
        • 1970-01-01
        • 2011-06-03
        • 2010-11-25
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多