我刚刚开始学习C语言,所以我非常糟糕,因为我来自于basic 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
我不知道它为什么要打印这个。
发布于 2013-09-19 00:31:55
你有一个多余的分号。
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-19 00:32:07
跳过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
发布于 2013-09-19 05:42:37
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");
}
https://stackoverflow.com/questions/18884487
复制相似问题