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

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

4

3 回答 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
于 2013-09-19T00:31:55.017 回答
2

跳过 for 循环中的分号:

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

对于您的逻辑,您不需要在 for 循环之后使用分号。

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

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

会给你一个输出,例如:

i: 5     Val: 32767
于 2013-09-19T00:32:06.577 回答
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");
}
于 2013-09-19T05:42:36.683 回答