在C语言中打印数组

4

我刚开始学习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

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


你不需要 <math.h> 库。你可能想要将数字彼此分离(使用空格或 %2d 等)。并且你绝对不希望访问超出数组边界的部分——在 for 循环后面的分号表示你正在访问 array[5],这是越界的。 - Jonathan Leffler
一旦您删除了多余的分号,您的输出应该是01234,这很难阅读。您可能想要将格式字符串从"%d"更改为" %d",这样数字就会被挤在一起。 - Keith Thompson
3个回答

7
你多了一个分号。
 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

0

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");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接