在循环中使用scanf的程序打印不正确的输出

在循环中使用scanf的程序打印不正确的输出,c,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; }

我不知道这个代码是怎么回事

#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;
   }
然后按原样打印, 但当我以相反的顺序提供输入时:

5 4 3 2 1
它不断询问更多的数字,然后从给定的输入集打印出一些随机数字


如何修复此问题?

c使用
0索引
,这意味着数组索引从0开始,而不是从1开始。数组上的for循环应如下所示:

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

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

ii[i]
for
i=5
是UB。
for(i=1;这些随机数字实际上是未定义的行为,您很幸运只得到了它们。请注意,数组是基于零的,索引从0到N-1运行,而不是从1到N。如果输入是字面上的
1,2,3,4,5
,则
scanf
永远不会超过第一个逗号。您应该始终检查returne值d by
scanf
(阅读手册页或其他文档以了解该值的含义。)@KeithThompson no its not.“我刚才进行了描述,以便更易于阅读
int array[ARRAY_LENGTH], i;
for (i = 0; i < ARRAY_LENGTH; ++i) {
for(i=1; i<=5; i++)
printf("%d\n", ii[i]);