在C中添加两个数组

时间:2016-10-28 16:34:46

标签: c arrays

问题基本上是在外部阵列上打印两个阵列作为右侧部分和左侧部分但是虽然我可以打印一个部分,但我无法打印另一个部分。场景是例如左边的5个元素和右边的7个元素。然后它反转右侧并将其粘在阵列的开头。

以下是我输入的代码段。

#include <stdio.h>
#include <stdlib.h>

int main()
{
 int mainarray[] = {} , n , i , rank;

 printf("\nHow many element[10..2000]: ");
 scanf("%d", &n);
 printf("\nEnter the array elements : ");
 for(i=0; i<n; ++i)
 {
      scanf("%d" , &mainarray[i]);
 }
 printf("\nThe array is : ");
 for(i=0 ; i<n ; i++)
 {
     printf("%d ",mainarray[i]);
 }    
 printf("\n\nEnter the rank of the element : ");
 scanf("%d",&rank);
 printf("\n\nElement on rank %d is: %d",rank, mainarray[rank-1]);


 int leftarray[] = {} , rightarray[] = {};

 for(i=0; i<=rank ; i++)
 {
          leftarray[i] = mainarray[i];
 }
 printf("\n\nThe left array is : ");
 for(i=0 ; i<=rank ; i++)
 {
         printf("%d ", leftarray[i]);
 }

 for(i=0 ; i<n-rank-1 ;i++)
 {
              rightarray[i]=mainarray[i+rank+1];
 }
 printf("\n\nThe right array is : ");
 for(i=0 ; i<n-rank-1 ;i++)
 {
         printf("%d ", rightarray[i]);
 }

 int j=n-rank-2,temp;
 i=0;
 while(i<j)
 {
           temp=rightarray[i];
           rightarray[i]=rightarray[j];
           rightarray[j]=temp;
           i++;
           j--;
 }
 printf("\n\nNew right array is : ");
 for(i=0 ; i<n-rank-1 ; i++)
 {
         printf("%d ", rightarray[i]);
 }

 i=0;

 while(i<n-rank-1)
 {
                mainarray[i]=rightarray[i];
                i++;
 }
 j=0;
 while(j<rank+1 && i<n-1)
 {
           mainarray[i]=leftarray[j];
           j++;
           i++;
 }

 printf("\n\nThe result is : ");
 for(i=0 ; i<n ; i++)
 {
         printf("%d ",mainarray[i]);
 }    

 printf("\n\n\n");
 system("pause");
 return 0;
}    

1 个答案:

答案 0 :(得分:1)

您在写作时声明空数组:

int mainarray[] = {};

因此,您将存储在数组边界之外,这会导致未定义的行为。

您需要在之后声明数组,以获得用户的大小。

scanf("%d", &n);
int mainarray[n]; // no need to initialize here, you're going to fill it in with the input loop

然后为leftarrayrightarray执行类似的操作:

scanf("%d",&rank);
int leftarray[rank];
int rightarray[n-rank];