30/09/2018, 19:25

Chương trình của em chỉ nhập được 1 sinh viên, cứ nhập đến sinh viên thứ 2 thì lỗi, mọi người giúp em vs ạ

Hỏi về lỗi( Unhandled exception at…) Chương trình của em chỉ nhập được 1 sinh viên, cứ nhập đến sinh viên thu 2 thì lỗi, mọi người giúp em vs ạ

#include<iostream>
#include<Windows.h>
#include<string.h>
using namespace std;

// Khai bao bien ho ten
struct HoTen
{
	char Ho[30];
	char Ten[30];
};
// Khai bao bien ngay sinh
struct date
{
	int ngay, thang, nam ;
};
// khai bao bien sinh vien

struct SinhVien
{
	HoTen HoTen_;
	date NgaySinh_;
	char GioiTinh;
	float dToan, dLy, dHoa, DTB;
};
// Khai bao bien toan cuc
int n;
SinhVien *sv = new SinhVien();
// Ham nhap
void nhap()
{
	cout << " moi ban nhap so sinh vien can nhap thong tin: ";
	cin >> n;
	fflush(stdin);
	for (int i = 0; i < n; i++)
	{
		cout << "Nhap thong tin cho sinh vien thu "<<i+1<<": " << endl;
		cout << " nhap ho: "; cin.getline(sv[i].HoTen_.Ho, 30);
		cout << "
 nhap ten: "; cin.getline(sv[i].HoTen_.Ten, 30);
		cout << "
 nhap ngay sinh: ";
		cin >> sv[i].NgaySinh_.ngay;
		fflush(stdin);
		cout << "
 nhap thang sinh: ";
		cin >> sv[i].NgaySinh_.thang;
		fflush(stdin);
		cout << "
 nhap nam sinh: ";
		cin >> sv[i].NgaySinh_.nam;
		fflush(stdin);
		cout << "
 diem mon Toan: ";
		cin >> sv[i].dToan;
		fflush(stdin);
		cout << "
 diem mon ly: ";
		cin >> sv[i].dLy;
		fflush(stdin);
		cout << "
 diem mon Hoa: ";
		cin >> sv[i].dHoa;
		fflush(stdin);
		sv[i].DTB = (sv[i].dToan + sv[i].dLy + sv[i].dHoa) / 3;
		system("cls");
		fflush(stdin);
	}
}
// ham in danh sach
void in()
{
	for (int i = 0; i < n; i++)
	{
		cout << "
 Sinh Vien thu: " << i + 1 << ": " << sv[i].HoTen_.Ho << " " << sv[i].HoTen_.Ten << endl;
		cout << " Sinh ngay: " << sv[i].NgaySinh_.ngay << "/" << sv[i].NgaySinh_.thang << "/" << sv[i].NgaySinh_.nam;
		cout << "
 Diem Toan: " << sv[i].dToan;
		cout << "
 Diem Ly: " << sv[i].dLy;
		cout << "
 Diem Hoa: " << sv[i].dHoa;
		cout << "
 Diem Trung Binh: " << sv[i].DTB<<endl;
	}
}
// Ham sap xep theo diem trung binh
void SapXep()
{
	for (int i = 0; i < n; i++)
		for (int j = i + 1; i < n;i++)
	{
		if (sv[i].DTB < sv[j].DTB)
		{
			SinhVien TrungGian = sv[i];
			sv[i] = sv[j];
			sv[j] = TrungGian;
		}
	}
	for (int i = 0; i < n; i++)
	{
		cout << "
 Sinh Vien thu: " << i + 1 << ": " << sv[i].HoTen_.Ho << " " << sv[i].HoTen_.Ten << endl;
		cout << " Sinh ngay: " << sv[i].NgaySinh_.ngay << "/" << sv[i].NgaySinh_.thang << "/" << sv[i].NgaySinh_.nam;
		cout << "
 Diem Toan: " << sv[i].dToan;
		cout << "
 Diem Ly: " << sv[i].dLy;
		cout << "
 Diem Hoa: " << sv[i].dHoa;
		cout << "
 Diem Trung Binh: " << sv[i].DTB;


	}
}
//Ham chuong trinh chinh
void main()
{
	nhap();
	SapXep();
	system("pause");
}
Khôi Trần viết 21:32 ngày 30/09/2018

bỏ hết fflush đi thay = cin.irnoge() sau cin>>n thôi

viết 21:27 ngày 30/09/2018

SinhVien *sv = new SinhVien();

như thế này thì sv chỉ là con trỏ tới 1 phần tử SinhVien chứ ko phải là trỏ tới mảng SinhVien.

sau khi cin >> n; trong hàm nhap() thì gọi sv = new SinhVien[n];. Rồi trong main() trước khi gọi system("pause"); thì gọi delete[] sv;

với lại bỏ mấy cái fflush đi thế bằng cin.ignore(100,'\n'); Chỉ cần ghi dòng này trước mấy dòng cin.getline mà trước nó xài cin >> thôi còn lại ko cần.

Trần Minh Trang 2000 viết 21:32 ngày 30/09/2018

cin.getline mà trước nó xài cin >> thôi còn lại ko cần

em chỉ sửa như này là chạy đc.
char Ho[50];
char Tên[50];

e cũng không biết tại sao

viết 21:39 ngày 30/09/2018

chạy lúc được lúc ko thôi. new SinhVien() là trỏ tới 1 vùng nhớ nào đó, nhưng chỉ có đủ chỗ cho 1 SinhVien. Truy cập sv[1] thì tùy, nếu vùng nhớ sau sv[0] ko có chương trình nào sử dụng thì ko sao, còn có chương trình nào khác sử dụng thì sẽ gây lỗi.

Trần Minh Trang 2000 viết 21:41 ngày 30/09/2018

vâng em cũng nghĩ nó có vấn đề, e sẽ sửa lại.

Bài liên quan
0