Hàm chèn không chạy

#include <iostream>
#include<iomanip>
#include<stdio.h>
#include<string.h>
using namespace std;
class nhanvien;
class date{
    int d,m,y;
    friend class nhanvien;
};
class ph_ban{
    string mapb,tpb,trg_ph;
    int snv;
    friend class nhanvien;
    friend void nv_taichinh(nhanvien a[],int n);
};
class nhanvien{
    string manv,hodem,ten;
    date ns;
    ph_ban ph;
public:
    void nhap();
    void xuat();
  //  friend void nv_taichinh(nhanvien a[],int n);
 //   friend void sxds(nhanvien a[],int n);
    friend void chen_nv(nhanvien a[],int &n);
    friend void xoa_manv_123(nhanvien a[],int &n);
};
void nhanvien::nhap(){
    cout<<"nhap ma nv:";fflush(stdin);getline(cin,manv);
    cout<<"nhap ho dem nv:";fflush(stdin);getline(cin,hodem);
    cout<<"nhap ten nv:";fflush(stdin);getline(cin,ten);
    cout<<"nhap ngay sinh nv:";cin>>ns.d>>ns.m>>ns.y;
    cout<<"nhap ma phong :";fflush(stdin);getline(cin,ph.mapb);
    cout<<"nhap ten pb:";fflush(stdin);getline(cin,ph.tpb);
    cout<<"nhap trg_ph:";fflush(stdin);getline(cin,ph.trg_ph);
    cout<<"nhap so nv:";cin>>ph.snv;
}
void nhanvien::xuat(){
    cout<<left<<setw(10)<<manv<<left<<setw(10)<<hodem<<left<<setw(10)<<ten<<left<<setw(10);
    cout<<ns.d<<left<<"/"<<ns.m<<"/"<<ns.y<<left<<setw(10)<<ph.mapb<<left<<setw(10);
    cout<<ph.tpb<<left<<setw(10)<<ph.trg_ph<<left<<setw(10)<<ph.snv<<endl;
}
void tt(){
    cout<<left<<setw(10)<<"ma_nv"<<left<<setw(10)<<"ho_dem"<<left<<setw(10)<<"ten_nv"<<left<<setw(10);
    cout<<"ngay_sinh"<<left<<setw(10)<<"ma_pb"<<left<<setw(10);
    cout<<"ten_pb"<<left<<setw(10)<<"truong_ph"<<left<<setw(10)<<"so_nv"<<endl;
}
void chen_nv(nhanvien a[],int &n){
    nhanvien m;
    cout<<"\nNhap nhan vien moi:"<<endl;
    m.nhap();
    int k;
    cout<<"\nnhap vi tri k muon chen:";cin>>k;
    ++n;
    for(int i=n-1;i>=k;--i){
        if(i!=k) a[i]=a[i-1];
        else{
            a[k]=m;
        }
    }
    cout<<"\n~~~~~~~DS sau khi chen~~~~~~\n";
    tt();
    for(int i=0;i<n;++i) a[i].xuat();
}
void xoa_manv_123(nhanvien a[],int &n){
    int i;
    string s="123";
    while(i>=0 && i<n){
        if(s.compare(a[i].manv)==0){
            for(int j=i;j<n;++j) a[j]=a[j+1];
            --n;
        }
        ++i;
    }
    cout<<"\n~~~~~~~DS sau khi xoa~~~~~~\n";
    tt();
    for(int x=0;x<n;++x) a[x].xuat();
}
int main()
{
    int n;
    cout<<"nhap n nhan vien:";cin>>n;
    nhanvien a[n];
    for(int x=0;x<n;++x){
        cout<<"\nnhap nhan vien thu "<<x+1<<endl;
        a[x].nhap();
    }
    cout<<"\n~~~~~~~DS nhan vien~~~~~~\n";
    tt();
    for(int x=0;x<n;++x) a[x].xuat();
    chen_nv(a,n);
  //  xoa_manv_123(a,n);
    return 0;
}

Các bậc tiền bối xem giúp em, chương trình không báo lỗi, nhưng em cứ đến đoạn chèn thì nó ko chạy được

Khai báo nhanvien a[n];. Bạn đang truy xuất ngoài mảng khi “đòi” chèn thêm.
Trường hợp theo hình: Mảng chỉ có tối đa 3 phần tử (nhân viên). Bạn lại muốn thêm “thằng” thứ 4. “Nhét” nó vào đâu?
Muốn chèn thêm thì làm sao?

  1. Khai báo mảng TO hơn 1 tí.
  2. Kiểm tra số phần tử tối đa (capacity) của mảng so với số phần tử hiện tại xem đã đến “đỉnh” chưa. Nếu đến “đỉnh” rồi thì tạo mảng mới lớn hơn (sao chép dữ liệu cũ qua). Ý tưởng của mảng động.
  3. Dùng vector luôn cho dễ.
6 Likes

Nhưng mà em có ++n trước đấy mà

++n không làm mảng của bạn tăng kích thước lên đâu, nó chỉ tăng n lên 1 thôi chứ chả làm gì khác cả.

4 Likes

à ok mình hiểu rồi, mình cảm ơn nhá

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?