2017-04-07 466 views
0

我無法弄清楚如何正確地將陣列中的元素向右移1位。陣列未初始化爲[1 ,2, 3, 4, 5]。所以當我換檔時,結果應該是[2, 3, 4, 5, 1],但是它出來的時候是[2, 3, 4, 5, 0],我不知道爲什麼。這是我到目前爲止 -將陣列中的元素向右移動1

for(k = 0; k <= n - 1; k++){ 
    array[k] = array[k+1]; 
    } 

    printf("Array is now:\n"); 
    k = 0; 
    while(k < n) { 
     printf("x[%d] = %f\n", k, array[k]); 
     k++; 
    } 

結果垂直打印。

+2

您不保存第一個元素的副本。而當'k'爲'n-1'時,由於'k + 1 == n - 1 + 1 == n',所以'array [n]'全部讀出數組邊界。 – StoryTeller

+1

我建議你編寫適當的函數,將數組解釋爲移位。實際上,對於大型陣列來說,轉換元件變得很昂貴如果他們保證相對較小,那麼您可以隨意使用任何作品。 – Downvoter

+0

編譯器警告C4477:'printf':格式化字符串'%f'需要類型爲'double'的參數,但可變參數2的類型爲'int'。我假設*'數組'是'int',請提供MCVE。 –

回答

0

這是僅右移1的基本代碼。如果你想要一個可以和任何索引一起工作的通用代碼,我會建議使用一個變量。

//array elements are from index 0 to n-1 

int tempData = array[0]; // if right shift is only by 1 
for(k = 0; k < n-1; k++){ 
    array[k] = array[k+1]; 
} 

array[n-1] = tempData; //reinstall the value of first index to last index 
printf("Array is now:\n"); 
k = 0; 
while(k < n) { 
    printf("x[%i] = %d\n", k, array[k]); 
    k++; 
} 
+3

這仍然*從邊界數組讀取*,這可能會導致錯誤。我建議'k

+0

'array [n-1] = tempData;'---->'array [k] = tempData;' – LPs

+0

@LPs是的,我認爲兩者同樣正確。 – roottraveller