我正在编写一个以非递减顺序排列数组的程序;然后,它在序列中插入一个值。我可以很容易地在数组的开头和中间得到数字,但每当我添加一个应该在最后的数字时,我会一直得到0.我哪里出错?
#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]);
}
}
答案 0 :(得分:1)
如果要输入的数字大于所有元素,则以下循环会产生问题。
...
for (i = 0; ; i++)
{
if (key < array[i])
{
pos = i;
break;
}
}
如果数字最大,那么pos
将是垃圾而不是n。数组的默认值是垃圾。
用它替换它。
for (i = 0;i<n ; i++)
{
if (key < array[i])
{
break;
}
}
pos = i;
...