在循环中使用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]
fori=5
是UB。for(i=1;这些随机数字实际上是未定义的行为,您很幸运只得到了它们。请注意,数组是基于零的,索引从0到N-1运行,而不是从1到N。如果输入是字面上的1,2,3,4,5
,则scanf
永远不会超过第一个逗号。您应该始终检查returne值d byscanf
(阅读手册页或其他文档以了解该值的含义。)@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]);