Xoá phần tử trong mảng thì bị xóa mất phần tử cuối

em lập trình như thế này khi chạy thì bị mất phần tử cuối là tại sao và sửa như thế nào vậy

#include<stdio.h>
#include<conio.h>
#include<math.h>
void nhapmang(int a[], int &n)
{
  printf("nhap so phan tu :" );
  scanf("%d",&n);
  for(int i=0;i<n;i++)
  { 
  	printf(" phan tu thu %d :",i);
    scanf("%d",&a[i]);
  }
}
int xuatmang(int a[],int n)
 {
  printf("mang da nhap \n");
  for(int i=0;i<n;i++)
    {
      printf(" %4d ",a[i]);
    }
 }
 int xoasoX(int a[], int *n, int x)
{
int i, j;
int res = -1;
for(i = *n-1; i >= 0; i--)
{
if(a[i] == x)
{
for(j = i; j < *n-1; j++)
{
a[j] = a[j+1];
}
(*n)--;
res = 0;
}
}
return res;
}
int main()
{
 int a[100],n,k,x;
 nhapmang(a,n);
 xuatmang(a,n);
 printf("\nphan tu muon xoa la :");
 scanf("%d",&x);
 xoasoX(a,&n,x);
  xuatmang(a,n);
 return 0;
}

Đã chạy thử nhưng vẫn không hiểu ý bạn là gì.

1 Like

Không liên quan tới câu hỏi nhưng trong C không có tham chiếu, int &n là sai cú pháp (thay vào đó khai báo con trỏ).

em cũng không rõ nhưng khi em thử khá nhiều lần thì nó đều mất phần tử cuối như trong dòng lện của anh là nó se mất số 6 khi xuất ra. Nhung nay, em thử lại chạy khá bình thường. Chuyện này là như thế nào ạ


Nay em thử bài làm chính của em thì lại không xuất ra mảng đúng hơn là hình như các số như bị tàn hình vì chèn vào vẫn đúng vị trí. Đây là bị sao ạ

Mình thấy bạn đang khai báo biến nhiều biến có cùng tên là int n ở cả hàm main và hàm nhapmang, xuatmang dẫn đến bạn không phân biệt được lúc nào thì biến n nào được gọi. Trong code hàm nhapmang của bạn thì biến n chỉ là biến cục bộ nên ra khỏi hàm thì biến n bị xóa đi, nó không làm thay đổi giá trị của biến n nằm ngoài main cho nên mới có kết quả như vậy. Bạn sửa lại cho đúng là sẽ chạy nhé.

#include<stdio.h>
#include<math.h>

void nhapmang(int a[], int *n)
{
    printf("nhap so phan tu: " );
    scanf("%d", n);
    for(int i = 0; i < *n; i++)
    { 
        printf("phan tu thu %d: ", i);
        scanf("%d", &a[i]);
    }
}
int xuatmang(int a[], int n)
{
    printf("mang hien tai: \n");
    for(int i = 0; i < n; i++)
    {
        printf(" %4d ", a[i]);
    }
}
int xoasoX(int a[], int *n, int x)
{
    int i, j;
    int res = -1;
    for(i = *n-1; i >= 0; i--)
    {
        if(a[i] == x)
        {
            for(j = i; j < *n-1; j++)
            {
                a[j] = a[j+1];
            }
            (*n)--;
            res = 0;
        }
    }
    return res;
}
int main()
{
    int a[100], num, xNum;
    nhapmang(a, &num);
    xuatmang(a, num);
    printf("\nphan tu muon xoa la: ");
    scanf("%d", &xNum);
    xoasoX(a, &num, xNum);
    xuatmang(a, num);
    return 0;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?