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");
}
Bài liên quan
bỏ hết fflush đi thay = cin.irnoge() sau cin>>n thôi
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àmnhap()
thì gọisv = new SinhVien[n];
. Rồi trongmain()
trước khi gọisystem("pause");
thì gọidelete[] 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òngcin.getline
mà trước nó xàicin >>
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
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.
vâng em cũng nghĩ nó có vấn đề, e sẽ sửa lại.