为什么这个 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]);
}
我写了一个程序,它的职责是从用户那里读取 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]);
}