这是书上一个数组删除的问题,代码如下:
1 #include <stdio.h> 2 #define SIZE 5 3 void print(int a[],int n); 4 int delarray(int a[],int n,int x); 5 int main() 6 { 7 int array[SIZE]={89,95,96,97,94}; 8 int x; 9 print(array,SIZE); 10 printf("Please intput x be deleted:\n"); 11 scanf("%d",&x); 12 if(delarray(array,SIZE,x)) 13 print(array,SIZE-1); 14 else 15 printf("Not be found!\n"); 16 return 0; 17 } 18 void print(int a[],int n) 19 { 20 int i; 21 printf("The array is:\n"); 22 for(i=0;i<n;i++) 23 printf("%4d",a[i]); 24 printf("\n"); 25 } 26 int delarray(int a[],int n,int x) 27 { 28 int i,j; 29 int flag=1; 30 for(i=0;i<n&&a[i]!=x;i++); 31 if(i==0) 32 flag=0; 33 else 34 { 35 for(j=i;j<n-1;j++) 36 a[j]=a[j+1]; 37 } 38 return flag; 39 }
可运行之后发现第一个元素无法删除,这是为什么??
int delarray(int a[],int n,int x) { int i,j; for(i = 0; i < n; i++) { if(a[i] == x) { for(j = i; j < n; j++) { a[j] = a[j+1]; } return 1; } } return 0; }
我改写了一下delarray()的代码,你看下
嗯,没有问题了,谢谢你
if(i==0)flag=0; else { for(j=i;j<n-1;j++) a[j]=a[j+1]; }
改成
for(j=i;j<n-1;j++) a[j]=a[j+1];
改了之后即使不存在的元素也会被当做最后一个元素删除的。
依旧感谢