在循环中使用scanf的程序打印错误的输出

时间:2015-09-23 18:21:49

标签: c

我不知道这段代码发生了什么。

#include<stdio.h>
int main()
   {
   int ii[5], i;
   for (i=1; i<=5; i++)
   {
      scanf("%d", &ii[i]);
   }
   printf("----------------------\n");  
   for(i=1; i<=5; i++)
   printf("%d\n", ii[i]);
   return 0;
   }

编译后我提供输入

1 2 3 4 5

然后按原样打印, 但是当我以相反的顺序提供输入时:

5 4 3 2 1

它继续要求更多数字,然后从给定的输入集打印出一些随机数字。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

c使用0 indexing表示数组索引从0开始而不是1.数组上的for循环应如下所示:

int array[ARRAY_LENGTH], i;
for (i = 0; i < ARRAY_LENGTH; ++i) {

这将确保i0转到ARRAY_LENGTH - 1,并且不会超出数组的范围。

这些行:

for(i=1; i<=5; i++)
printf("%d\n", ii[i]);

将访问5的最大索引为4的元素ii。这将导致未定义行为,这可能是您看到随机数出现的原因。