# GÓC SÁNG TẠO > Khu vực lập trình > C/C++ >  C++ khúc mắc Mảng 1 chiều

## pesttykl

dạ tình hình là thế này ạ : em có làm 1 đề tài về C++, bao gồm nhập, xuất, xóa giá trị trong mảng. em viết thế này.



```
   
     #include"stdio.h"
     #include"conio.h"
     int a[100],n;
     //===================================
     void nhapmang(int a[])
      {
         for(int i=0;i<n;i++)
         {
           printf("a[%d]= ",i);
           scanf("%d",&a[i]);
         }
      }
     //===================================
     void xuatmang(int a[])
      {
         for(int i=0;i<n;i++)
         printf("a[%d]= %d 
",i,a[i]);
      }
    //=====================================
    void xoapttvt(int a[])
     {
       int vt;
        for(int i=0;i<n;i++)
          if((vt<0)||(vt>n))
           if(vt==i)
         for(int j=vt+1;j<n-1;j++)
       a[j]=a[j+1];
       n=n-1;
     }


    //=====================================
    void main()
    {
      clrscr();
      printf("
 nhap so phan tu:");
      scanf("%d",&n);
      nhapmang(a);
      char nhan;
      int chon,chon1,chon2;
      do
      {
        printf("
****************menu*****************");
        printf("
*     1.tim kiem phan tu trong mang *");
        printf("
*     2.them phan tu trong mang     *");
        printf("
*     3.xoa phan tu trong mang      *");
        printf("
*************************************");
        printf("
 chon mot chuc nang tuong ung");
        scanf("%d",&chon);
        switch(chon)
        {
          case 1:
          break;
          {
        default:
        printf("
 khong co chuc nang ban hay xac nhan lai...\a\a\a");
        break;
          }
          case 2:
          {
           printf("
**************menu*******************");
           printf("
*  1.them phan tu vao dau mang      *");
           printf("
*  2.them phan tu vao cuoi mang     *");
           printf("
*  3.them phan tu vao vi tri bat ky *");
           printf("
*************************************");
           printf("
 chon mot chuc nang tuong ung");
           scanf("%d",&chon1);
           switch(chon1)
        {
          case 1:
           break;
          case 2:
           break;
          case 3:
           break;
           {
            default:
            printf("
 khong co chuc nang nay ban hay xac nhan lai......\a\a\a");
            break;
           }
         }
         break;
           }
           case 3:
           {
        printf("
**************menu***************************");
        printf("
* 1.xao phan tu theo vi tri trong mang      *");
        printf("
* 2.xoa phan tu theo gia tri trong mang     *");
        printf("
*********************************************");
        printf("
 chon mot chuc nang tuong ung");
        scanf("%d",&chon2);
        switch(chon2)
         {
          case 1:
           int vt;
           printf("
 mang truoc khi xoa la:");
           xuatmang(a);
           printf("
 nhap vi tri can xoa(0 ->%d)",n-1);
           scanf("%d",&vt);
           if(vt<0||vt>n)
           printf("
 vi tri xoa khong hop le");
           else
            {
             xoapttvt(a);
             printf("
 mang sau khi xoa la:");
             xuatmang(a);
            }
           break;
          case 2:
           break;
          {
           default:
            printf("
 khong co chuc nang nay ban hay xac nhan lai......\a\a");
          }
         }

           }
        }
      printf("
 neu ban muon tiep tuc thi nhan 'Y'con khong muon thi nhan 'N'");
      nhan=getch();
      } while(nhan=='y'||nhan=='Y');
    }
```

dạ chạy thì vẫn ok, không vấn đề gì nhưng em khúc mắc ở chỗ khi em xóa giá trị trong mảng, thì trong chương trình có đoạn chọn vị trí cần xóa ví dụ liệt kê có các mảng 
a[0] =1 
a[1] =2
a[2] =3 
em chọn xóa vị trí thứ 3, tức là vị trí a[2] thì nó lại đi xóa vị trí thứ nhất là a[0]. hic hic còn em chọn xóa vị trí đầu thì ngược lại nó lại xóa vị trí cuối. 
có bác nào giúp đỡ em giải đáp khúc mắc này em xin cảm ơn rất nhiều, em tìm hoài không ra lỗi nữa.. :down:

----------


## seovg

bạn đau cần dài dòng như vậy.cái hàm xoapttvt(int a[],int vt).sau đó trong hàm main bác nhập vt cần xóa.sau do cho hàm nó vào là dc.bác viết tum lum em cung chẳng muốn đọc nhìu đâu,bác xem thế co khá hơn ko.

----------


## thietkebietthu

hàm switch bác dùng trong trường hợp này em thấy nó có cái gì đó ko thuận lợi,vì nó chỉ đc dùng trong trường hợp:chưa bít chắc và liệt kê thôi.chứ em nghĩ xóa pt thì ko can sử dụng đến nó

----------


## haido92

cảm ơn bạn, bạn có thể giải đáp giúp mình câu hỏi được không bạn ? 
nếu được cảm ơn bạn lắm lắm !

----------


## nguyenanhthuoc

hix,mình nói bạn rồi mừ.thế này nhé khi bạn nhập vào int vt ở hàm main thì nó khác với cái int vt trong hàm xoapttvt(int a[]) đúng ko?vì thế mà bạn muốn cho nó nhận vt mà bạn nhập vào ứng dụng vào xoapttvt thì mình viết thế này bạn xem sao:
void xoapttxt(int a[],int vt)
{ \\bạn bỏ cái int vt trong hàm này di các thứ khác giữ như cũ }
mình nghĩ như thế là ổn.Để khi nào có thời gian mình sẽ chạy bài giờ mình chưa có thời gian .bạn thông cảm ha.

----------


## thaonguyenxanh_9x

thanks Winter nhiều nghen ^^!

----------

