30/09/2018, 18:44

[Giusp đỡ]Lập trình c++ trên Visual 2015

Chào mn ,tình hình là e viết 1 đoạn code chạy trên máy ở trường thì bình thường nhưng mang về máy e chạy nó bị ntn


ai biết lỗi gì không ạ

Pham Van Hai viết 20:56 ngày 30/09/2018

Không có Code thì khó đoán bệnh lắm bạn ah.

Nguyễn Hùng viết 20:51 ngày 30/09/2018

đợi e tí e up code

#include<iostream>
#include<string>
#define hienTai 2015
using namespace std;
struct NhanVien {
	char ten[50];
	int ms;
	string gioitinh;
	int namsinh;
	int namvaolam;
	NhanVien *next;
};
struct List {
	NhanVien *dau;
	NhanVien *cuoi;
};
void khoiTao(List &l)
{
	l.dau = l.cuoi = NULL;
}
NhanVien *taoNODE()
{
	NhanVien *nv = new NhanVien[1];
	cout << "Ten nhan vien : ";
	cin.ignore(1);
	cin.getline(nv->ten, 49);
	cout << "Ma so : ";
	cin >> nv->ms;
	cout << "Gioi tinh(nam/nu) : ";
	cin >> nv->gioitinh;
	cout << "Nam sinh : ";
	cin >> nv->namsinh;
	cout << "Nam lam viec : ";
	cin >> nv->namvaolam;
	nv->next = NULL;
	return nv;
}
void themDau(List &l, NhanVien *x)
{
	if (l.dau ==NULL)
	{
		l.dau = l.cuoi = x;
	}
	else
	{
		x->next = l.dau;
		l.dau = x;
	}
}
void hamXuat(List l)
{
	NhanVien *data;
	data = l.dau;
	if (data == NULL)
	{
		cout << "Khong co nhan vien nao trong danh sach !";
	}
	cout << "Ten nhan vien\t" << "Ma so\t" << "G.tinh\t" << "N.sinh\t" << "N.vaolam\n";
	for (data = l.dau; data != NULL;data = data->next)
		{ 
			cout << data->ten << "\t" << data->ms << "\t" << data->gioitinh << "\t" << data->namsinh <<"\t" << data->namvaolam << endl;
		}
}
void thamNien(List &l)
{
	NhanVien *timkiem;
	timkiem = l.dau;
	if (l.dau == NULL)
	{
		cout << "Danh sach trong !";
	}
	else
		for (timkiem = l.dau;timkiem != NULL;timkiem=timkiem->next)
		{
			if (hienTai - (timkiem->namvaolam) >= 30) 
			{

				cout << timkiem->ten << "\t" << timkiem->ms << "\t" << timkiem->gioitinh << "\t" << timkiem->namsinh << endl;
			}
			else if(timkiem ==l.cuoi)
			{
				cout << "Xin Loi,Khong co nhan vien nao :(" << endl ;
			}
		}
}
void nghiHuu(List &l)
{
	NhanVien *data;
	data = l.dau;
	if (l.dau == NULL)
	{
		cout << "Danh sach trong ! ";
	}
	else
		for (data = l.dau;data != NULL;data=data->next)
		{
			if ((hienTai - data->namsinh > 59) && data->gioitinh == "nam" || (hienTai - data->namsinh > 54) && data->gioitinh == "nu")
			{
				cout << data->ten << "\t" << data->ms << "\t" << "\t" << data->namsinh << "\t" << data->namvaolam << endl;
			}
			else if (data==l.cuoi)
			{
				cout << "Xin Loi,Khong co nhan vien nao :(" << endl;
			}
		}
}
//
int Xoa(List &l)
{
	int x;
	cout << "Ban can xoa nhan vien co ms bao nhieu: ";
	cin >> x;
	NhanVien *lol;
	lol = l.dau;
	if (lol == NULL)
		cout << "\nDanh sach rong! \n";
	else
	{
		NhanVien *xoa;
		if (lol->ms == x)
		{
			xoa = l.dau;
			l.dau = l.dau->next;
			delete xoa;
			hamXuat(l);
			return 0;
		}
		while (lol != NULL && lol->next->ms != x)
			lol = lol->next;
		if (lol != NULL)
		{
			xoa = lol->next;
			lol->next = xoa->next;
			delete xoa;
		}
		else
			cout << "Khong tim thay";
	}
	cout << "Danh sach sau khi xoa:\n";
	hamXuat(l);
}
int main()
{
	List SaoViet;
	khoiTao(SaoViet);
	int n;
	cout << "Nhap so luong nhan vien : ";
	cin >> n;
	for (int i = 0;i < n;i++)
	{
		themDau(SaoViet, taoNODE());
	}
	hamXuat(SaoViet);
	cout << "--------------------------Danh sach nhan vien tham nien tren 30 nam--------------------------\n";
	cout << "Ten nhan vien" << "\t" << "Ma so" << "\t" << "G.tinh" << "\t" << "N.sinh" << endl;
	thamNien(SaoViet);
	cout << "---------------------------------------------------------------------------------------------\n";
	cout << "---------------------------------Danh sach nhan vien nghi huu--------------------------------\n";
	cout << "Ten nhan vien" << "\t" << "Ma so" << "\t" << "\t" << "N.sinh" << "\t" << "N.vaolam" << endl ;
	nghiHuu(SaoViet);
	cout << "---------------------------------------------------------------------------------------------\n";
	cout << "------------------------------Danh sach nhan vien sau khi xoa--------------------------------\n";
	Xoa(SaoViet);
	system("pause");
}

ở hàm xóa e viết đến khi nhập mã số cần xóa nó ra lỗi trên

Pham Van Hai viết 20:46 ngày 30/09/2018

Bạn dùng sai lệnh delete

Bạn cấp phát 1 mảng gồm một phần tử

NhanVien *nv = new NhanVien[1];

Nhưng lại dùng lệnh giải phóng giống kiểu khai bảo 1 biến bình thường, bạn chỉ có thể dùng lệnh bên dưới cho lệnh: NhanVien *nv = new NhanVien;

delete xoa;

Trong chương trình của bạn thì phải dùng lệnh
delete[] xoa;

Nguyễn Hùng viết 20:54 ngày 30/09/2018

tks bạn nhiều nha !!!

Nguyễn Hùng viết 21:01 ngày 30/09/2018

nhưng vẫn không được

Văn Dương viết 20:46 ngày 30/09/2018

Trong hàm Xóa, xóa hết các lệnh [ delete xoa; ] đi và dùng 1 câu [delete xoa;] là câu lệnh nằm dưới cùng hàm xem sao ?

kethanbi viết 20:58 ngày 30/09/2018

thử coi lại return đi b

Nguyễn Hùng viết 20:46 ngày 30/09/2018

Sáng nay e mang lên trường chạy thử thì ok .Điên quá mất.k hiểu lỗi tại sao máy e thì nó không chịu chạy

kethanbi viết 20:54 ngày 30/09/2018

hàm trả về kiểu int mà bạn chỉ return trong 1 cái if . Coi lại đi bạn

Nguyễn Hùng viết 21:00 ngày 30/09/2018

Đây là code e đã sửa và nó chạy được trên trường mà về máy không có chạy
void Xoa(List &l) { if (l.cuoi == NULL) cout << "Danh sach rong!"; else { int ms; cout << "Ban muon xoa khoi ds sinh vien co ms la: "; cin >> ms; NhanVien *data, *x; data = l.dau; if (data->ms == ms) { l.dau = l.dau->next; delete data; cout << "Xoa nut thanh cong!"; } else { while (data != l.cuoi && data->next->ms != ms) data = data->next; if (data == l.cuoi) cout << "Khong co sinh vien nao co ms la " << ms; else { x = data->next; data->next = x->next; if (x == l.cuoi) l.cuoi = data; delete x; cout << "Xoa nut thanh cong!"; } } } }

Bài liên quan
0