2013-11-26 24 views
0

我正在寫一個程序,按非遞減順序排列數組;然後,它會在序列中插入一個值。我可以很容易地在數組的開頭和中間獲取數字,但是每當我添加一個應該結束的數字時,我都會得到0.我在哪裏出錯?C數組非降序順序插入值

#include <stdio.h> 

int main() 
{ 
    int array[10]; 
    int i, j, n, m, temp, key, pos; 

    printf("Enter number of elements:\n"); 
    scanf("%d", &n); 
    printf("Enter the elements:\n"); 
    for (i = 0; i < n; i++) 
    { 
    scanf("%d", &array[i]); 
    } 
    printf("Input array elements:\n"); 
    for (i = 0; i < n; i++) 
    { 
    printf("%d\n", array[i]); 
    } 
    for (i = 0; i < n; i++) 
    { 
    for (j = i + 1; j < n; j++) 
    { 
     if (array[i] > array[j]) 
     { 
     temp = array[i]; 
     array[i] = array[j]; 
     array[j] = temp; 
     } 
    } 
    } 
    printf("Sorted list is\n"); 
    for (i = 0; i < n; i++) 
    { 
    printf("%d\n", array[i]); 
    } 
    printf("Enter the element to be inserted X:\n"); 
    scanf("%d", &key); 
    for (i = 0; ; i++) 
    { 
    if (key < array[i]) 
    { 
     pos = i; 
     break; 
    } 
    } 
    m = n - pos + 1 ; 
    for (i = 0; i <= m; i++) 
    { 
    array[n - i + 2] = array[n - i + 1] ; 
    } 
    array[pos] = key; 
    printf("Final list is:\n"); 
    for (i = 0; i < n + 1; i++) 
    { 
    printf("%d\n", array[i]); 
    } 
} 
+2

難道這與你正在創建一個大小爲10的數組然後詢問數組應該有多大有關嗎? – mclaassen

回答

1

如果輸入的數字大於所有元素,則以下循環會產生問題。

... 
for (i = 0; ; i++) 
{ 
if (key < array[i]) 
{ 
    pos = i; 
    break; 
} 
} 

如果數字是最大的,那麼pos將是垃圾,而不是一個數組的n.The默認值是垃圾。 用此替換它。

for (i = 0;i<n ; i++) 
{ 
if (key < array[i]) 
{ 
    break; 
} 
} 
pos = i; 
... 
+0

謝謝你做到了! – texastrosch