为什么这个 for 循环在第二个索引处结束?

Why this for loop ends in the second index?

我写了一个程序,它的职责是从用户那里读取 20 个数字并将它们放在一个列表中,然后它从底部到起点打印数组中的值。

但是程序在从输入中读取第二个值后正好停止。

源代码:

#include <stdio.h>
#define N 20
int main(void)
{
    int numbers[N];
    int i;

    for(i=0;i<N;i++)
    {
        scanf("%i", &numbers[i]);
    }

    for(i=N;i<0;i--)
    {
        printf("%i", numbers[i]);
    }
    return 0;
}

我使用 Dev-C++ 5.6.3 作为我的 IDE 和 TDM-GCC 4.8.1 作为我的编译器.但我不确定这是否是一个 IDE 相关问题。

如果你想让你的第二个循环倒计时,那么

 for(i=N;i<0;i--)

应该是

 for(i=N;i>0;i--)

否则循环将不会执行,因为 i<0 不是真正开始的。

并且,正如@WeatherVane 在评论中指出的那样:

scanf("%i", numbers[i]);

应该是

scanf("%i", &numbers[i]);

因为您需要将指针传递给您希望用 scanf returns.

填充的整数

如果要循环往下数,那么这个循环

for(i=N;i<0;i--)

从错误的索引开始,并且未通过测试条件。应该是

for(i = N - 1; i >= 0; i--)

第二个循环必须是 for(i=N;i>=0;i--) 所以索引将从 19 到 0(20 个数字)

试试这个

#include <stdio.h>
#define N 20
int main(void)
{
    int numbers[N];
    int i;

    for(i = 0; i < N; i++)
    {
        scanf("%i", &numbers[i]);
    }

    for(i = N ; i >= 0; i--)
    {
        printf("%i ", numbers[i]);
    }
    return 0;
}

试试这个:

#include <stdio.h>
#define N 20
int main(void)
{
    int numbers[N];
    int i;

    for(i = 0; i < N; i++)
    {
        scanf("%i", &numbers[i]);
    }

    for(i = N - 1; i >= 0; i--)
    {
        printf("%i ", numbers[i]);
    }
    return 0;
}

记住 scanf 总是使用指针。

for(i=N-1;i>=0;i--)

对于数组中的 n 个项目,最后一个索引将为 n-1。您需要从 n-1 索引迭代到第 0 个索引。

您的第二个循环的条件 "i<0" 从一开始就是错误的。应该是"i > -1"。您还需要确保第一次使用索引 19 而不是 20 调用 printf。这就是为什么我使用预递减运算符 -- i。

for(i = N; i > -1; )
{
    printf("%i\n", numbers[--i])
};

下面给出的 for 循环存在一些问题。

for(i=N;i<0;i--)
{
    printf("%i", numbers[i]);
}
return 0;

如果你想从底部到起点打印数组。 您可以在 for 循环中进行一些更改。

变化:

1- 将值赋值给 i 时循环发生变化: i = N-1 -> 因为数组的大小是 20,数组索引从 0 开始。 它将从 19 到 0 打印所有 20 个数据值。

2- 循环检查条件的变化: i >= 0 当我们打印反向数组时。

正确的 for 循环应该是

for(i = N-1; i >= 0; i--)
{
    printf("%i", numbers[i]);
}