为什么插入元素后数组中值被改变?
小弟今天学习一维数组时在下面的程序中插入一个元素后(我随便插入了一个元素值到第3位,发现原先的12,5,7,6,32,中7变成了6,这是为什么,是否是系统原因。#include<stdio.h>
#define MAXNUMBER 30
main()
{
int n=5;
int array[MAXNUMBER]={12,5,7,6,32};
int value; /*要插入或被删除的元素值*/
int location; /*要插入或删除的位置*/
int i;
printf("修改前的数组:\n");
for (i=0;i<5;i++)
printf("%5d",array[i]);
/*数值的插入操作*/
printf("请输入要插入的元素: ");
scanf("%d",&value);
printf("请输入要插入的位置(1..%d): ",n+1); //这里的(1...%d)编译后显示(1..6),前面不是只定义了5个数组元素吗/
scanf("%d",&location);
if ((location<1) || (location>n+1))
{ /*允许插入的位置是[0,n],允许在末端插入*/
printf("插入的位置超出范围!!\n");
return;
}
if (n==MAXNUMBER)
{ /*整个数组已达到最大长度,已不能再插入数据元素*/
printf("数组已达到最大长度,再插入将超出范围!!\n");
return;
}
n++;
for (i=n;i>location;i--)
array[i]=array[i-1]; /*向后移动元素*/
array[location-1]=value; /*插入点赋值*/
printf("插入后的数组为:\n"); /*输出插入后的数组*/
for (i=0;i<n;i++)
printf("%5d",array[i]);
/*数组的删除操作*/
printf("\n请输入要删除第几个元素(1...%d):",n);
scanf("%d",&location);
if ((location<1) || (location>n))
{ /*允许删除的位置是[0,n-1]*/
printf("删除的位置超出范围!!\n");
return;
}
value=array[location-1]; /*得到删除点的值*/
printf("将被删除的元素值为:%d\n",value);
for (i=location-1;i<n-1;i++)
array[i]=array[i+1]; /*向前移动元素*/
n--;
printf("删除后的数组为:\n"); /*输出删除后的数组*/
for (i=0;i<n;i++)
printf("%5d",array[i]);
printf("\n");
return;
}
----------------解决方案--------------------------------------------------------
for (i=n;i>=location;i--)
array[i]=array[i-1]; /*向后移动元素*/
把FOR循环里面的>改成>=号,
因为你移动的时候也要把正处在那个位置的数移动,故需要把它向后移动.
----------------解决方案--------------------------------------------------------
成功了
我将printf("请输入要插入的位置(1..%d): ",n+1);改成了printf("请输入要插入的位置(1..%d): ",n);这样应该没有影响吧。
----------------解决方案--------------------------------------------------------
我觉得这个问题使用指针会好一些
----------------解决方案--------------------------------------------------------
是吗,不过我还没看到指针,我会加油的,现在一天一章,进度还比较满意,就是周围没人教我,只有在论坛找人问,多谢大家了。
----------------解决方案--------------------------------------------------------
比我好多了,我真惭愧
----------------解决方案--------------------------------------------------------