2016-10-28 61 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