我的输出的第一个元素是错误的,我想写一个以数组为输入并反转它的C函数

我的输出的第一个元素是错误的,我想写一个以数组为输入并反转它的C函数,c,arrays,C,Arrays,我想写一个C函数,它接受数组作为输入并反转它,但是输出的第一个元素是错误的,所以我想了解这个问题输出的分析。例如,如果我输入[34 3 2 1 12]则输出为[32766 12 1 2 3] #include <stdio.h> void reverse_array(int arr[],int n); #define size 5 int main() { int i=0; int arr[size]; //scan array from user print

我想写一个C函数,它接受数组作为输入并反转它,但是输出的第一个元素是错误的,所以我想了解这个问题输出的分析。例如,如果我输入
[34 3 2 1 12]
则输出为
[32766 12 1 2 3]

#include <stdio.h>
void reverse_array(int arr[],int n);
#define size 5

int main()
{
 int i=0;
 int arr[size];

 //scan  array from user     
 printf("please enter elements of array:\n");
 for(i=0;i<size;i++)
 {
   scanf("%d",&arr[i]);
 }

 //call fun
 printf("the  reverse  array is :");
 reverse_array(arr,size);

}

 //define function     
void reverse_array(int arr[], int n)
{
   int i=n;

   for(i<=n;i>0;i--)
   {
     printf("%d\t",arr[i]);
   }
}
#包括
无效反向数组(int-arr[],int-n);
#定义尺寸5
int main()
{
int i=0;
int arr[尺寸];
//从用户扫描阵列
printf(“请输入数组的元素:\n”);
对于(i=0;i您“仅”打印数组元素,而您可能希望实际反转数组中的顺序

经典的方式是这样的:

void reverse_array(int arr[], int n)
{
  for(int i = 0; i < n / 2; ++i)
  {
    const int j = (n - 1) - i;
    const int k = arr[j];
    arr[j] = arr[i];
    arr[i] = k;
  }
}
void reverse_数组(int arr[],int n)
{
对于(int i=0;i
这将通过交换元素来反转阵列的位置。

此循环

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


请注意,您只需反向打印它,如果这是您需要的,那很好,如果您需要保存它,您需要做更多的工作。

我认为您正在尝试这样做

void reverse_array(int arr[], int n)
{
    int i;

    for(i=n-1;i>=0;i--)      //i=n-1 i.e 4, it runs 4,3,2,1,0
    {
      printf("%d\t",arr[i]);
    }

}
有两个问题

第一个是i的初始化应该是int i=n-1;而不是int i=n;因为arr[n]不存在 其次,for循环应该循环到i>=0,而不是i>0,因为如果迭代只工作到i>0,则不会打印arr[0]

#包括
无效反向数组(int-arr[],int-n);
#定义尺寸5
int main()
{
int i=0;
int arr[尺寸];
//从用户扫描阵列
printf(“请输入数组的元素:\n”);
对于(i=0;i=0;i--)
{
printf(“%d\t”,arr[i]);
}
}

如果aray的大小为
n
那么它的最后一个元素索引是
n-1
。而且你的
for
也很奇怪。第一部分
iyou访问的是arr[5],它不存在,但32766意味着我打印的arr[5]没有在我的代码中定义,所以它应该是arr[n-1]@sarahamdy,它打印的是
arr[5]
,你说
i=n
,也就是5,然后在递减之前打印它,注意在我的修正中
i
在打印节点之前递减,因此打印
arr[5-1]
@sarahamdy,还要注意for循环中的第一个字段
i
void reverse_array(int arr[], int n)
{
    int i;

    for(i=n-1;i>=0;i--)      //i=n-1 i.e 4, it runs 4,3,2,1,0
    {
      printf("%d\t",arr[i]);
    }

}
#include <stdio.h>
void reverse_array(int arr[],int n);
#define size 5

int main()
{
 int i=0;
int arr[size];
//scan  array from user
printf("please enter elements of array:\n");
           for(i=0;i<size;i++)
                     {
              scanf("%d",&arr[i]);
                      }
//call fun
printf("the  reverse  array is :");
reverse_array(arr,size);


}
//define function
void reverse_array(int arr[], int n)
{
int i;

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

}