2016-10-28 60 views
0

问题基本上是在外部阵列上打印两个数组作为右侧部分和左侧部分,但尽管我可以打印一个部分,但我无法打印其他部分。情景是,例如左边的5个元素和右边的7个元素。然后它反转右侧并将其粘贴到数组的开头。在C中添加两个数组

这是我输入的一段代码。

#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

'INT mainarray [] = {}' - 哎哟。如果您正在拍摄不含任何元素的阵列,则会找到它。 – WhozCraig

+1

当你执行'int mainarray [] = {}''你定义'mainarray'是一个* empty *数组。所有索引都会超出范围。 –

+1

'scanf(“%d”,&n); int mainarray [n];' – BLUEPIXY

回答

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]; 
+0

非常感谢@Barmar这个问题会在一些微小的变化之后解决。 – erengsgs