我在这个c程序中找不到bug

我在这个c程序中找不到bug,c,arrays,C,Arrays,我在一篇教程中发现了这一点。它是一个向后打印给定数组的程序。但是它不会向后打印数组,因为它有一个bug。它说我应该找到那只虫子,但我找不到 #include <stdio.h> int main() { int ara[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100}; int i, j, temp; for(i = 0, j = 9; i < 10; i++, j--) { temp = ara[j];

我在一篇教程中发现了这一点。它是一个向后打印给定数组的程序。但是它不会向后打印数组,因为它有一个bug。它说我应该找到那只虫子,但我找不到

#include <stdio.h>

int main()
{
  int ara[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};

  int i, j, temp;

  for(i = 0, j = 9; i < 10; i++, j--)
  {
    temp = ara[j];
    ara[j] = ara[i];
    ara[i] = temp;
  }

  for(i = 0; i < 10; i++) 
  {
    printf("%d\n", ara[i]);
  }
  return 0;
}

错误在于该算法通过交换数组中项目的位置来工作,但它会迭代过多的元素。当我遍历前5个元素时,数组是向后的。但迭代在过去5年中继续进行,将所有元素放回原始位置


通过在循环的每一圈打印整个阵列,您可以很容易地发现这一点。

交换两次,就像什么都不做一样。只交换一次

for(i = 0, j = 9; i < 5; i++, j--)
{
    temp = ara[j];
    ara[j] = ara[i];
    ara[i] = temp;
}

上面的代码在我从0->9移动和j从9->0移动时交换ara[i]和ara[j]。 最终的结果是所有的数字回到原来的位置。 如果要反转原始阵列,请使第一个for循环如下图所示

for(i = 0, j = 9; i < j; i++, j--)

您尝试过调试器吗?欢迎使用堆栈溢出!听起来您可能需要学习如何使用调试器逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:。在第一个for-loop中,您希望i<10/2而不是i<10。在每一步打印阵列,您将看到问题……感谢鱼。我明天会再来找你。一定要把它准备好。这次是鲑鱼,我知道了,很抱歉。但是我认为使用调试器来解决这样的问题不是一个好主意。基本上我是在考试中做这件事的,没有电脑,更不用说调试器了。
for(i = 9; i >= 0; i--)