打印输入数组的逆数组时出现问题

时间:2018-10-20 11:19:14

标签: c arrays

#include <stdio.h>
#include <conio.h>

void main()
{
  int arr[5], new[5], i, j;

  printf("ENTER ANY FIVE NUMBERS:");
  scanf("%d%d%d%d%d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4]);

  for(i=0; i<5; i++)
  {
    for(j=5; j>=0 ;--j)
    {
      new[i] = arr[j];
      printf("%d", new[i]);
      printf(" ");
    }
  }
  getch();
}

上面的代码是一个简单的问题,它要求在数组中获取数字的输入并显示输入的逆数组。我试图自己解决它,并编写了上面的代码。但是编译器会多次显示结果,我的意思是,结果应该只有5个数字,但输出显示一系列数字。

1 个答案:

答案 0 :(得分:1)

这是一个问题:

for(j=5;j>=0;--j){
    new[i]=arr[j];
               ^ out of bounds access to arr[5]

将其更改为

for(j=4;j>=0;--j){  // 4 instead of 5
    new[i]=arr[j];

也就是说,如果您只想以相反的顺序打印数组,只需执行:

    for(j=4;j>=0;--j){
        printf("%d", arr[j]);
        printf(" ");
    }
    printf("\n");

不需要两个循环,也不需要额外的数组new

如果您真的想要“反向副本”,请执行以下操作:

    for(j=4;j>=0;--j){
        new[4-j] = arr[j];
        printf("%d", arr[j]);  // or printf("%d", new[4-j]);
        printf(" ");
    }
    printf("\n");