mình có bài dslk như sau, nó bị lỗi ở phần sắp xếp sinh viên theo điểm và hiện ds sinh viên có điểm lớn nhất, khi chọn vào 2 cái đó thì bị crash, không hiểu mình sai ở đâu.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
//Khoi tao cau truc du lieu cua danh sach lK don kieu SinhVien
struct SinhVien{
char masv[100];
char tensv[100];
float diemsv;
};
//Khoi tao 1 NODE
struct Node{
SinhVien data;
struct Node *pNext;
};typedef struct Node NODE;
//Khoi tao danh sách lien ket
struct List{
NODE *pHead;
NODE *pTail;
};typedef struct List LIST;
//Khoi tao danh sach rong
void Init(LIST &l){
l.pHead = l.pTail = NULL;
}
//Tao NODE chua data vao con tro pNext trong danh sach
NODE* get_node(SinhVien x){
NODE *p = new NODE;
if(p==NULL){
printf("Bo nho khong du");
return 0;
}
p->data = x; // Luu sinh vien x vao data
p->pNext = NULL; // Khoi tao moi lien ket
return p;
}
//Nhap sinh vien
void nhapsv(SinhVien &sv){
printf("\nNhap ma Sinh vien: ");
fflush(stdin);
gets(sv.masv);
printf("Nhap ho ten Sinh Vien: ");
gets(sv.tensv);
fflush(stdin);
printf("Nhap diem trung binh sinh vien: ");
scanf("%f",&sv.diemsv);
fflush(stdin);
}
//Xuat sinh vien
void xuatsv(SinhVien sv){
printf("\n");
printf("%s\t%s\t%.2f",sv.masv,sv.tensv,sv.diemsv);
}
//Hoan vi 2 sinh vien
void hoanvi(SinhVien &sv1, SinhVien &sv2){
SinhVien t = sv1;
sv1 = sv2;
sv2 = t;
}
//Tim sinh vien co diem MAX
void diemMAX(LIST l){
int dem;
NODE *p = l.pHead;
NODE *max;
max = p;
for(p; p!=NULL; p=p->pNext){
if(p->data.diemsv > max->data.diemsv){
max = p; dem = 0;
}
if(p->data.diemsv == max->data.diemsv){
max = p; dem++;
}
}
if(dem == 0){
xuatsv(max->data);
}else{
NODE *q = l.pHead;
while(q!=NULL){
if(p->data.diemsv==max->data.diemsv){
xuatsv(q->data);
q=q->pNext;
}
}
}
}
//Sap xep sinh vien diem tang dan
void sapxeptang(LIST l){
for(NODE *p=l.pHead; p!=l.pTail; p=p->pNext){
for(NODE *p1=p->pNext; p!=NULL; p1=p1->pNext){
if(p->data.diemsv > p1->data.diemsv){
hoanvi(p->data,p1->data);
}
}
}
}
//Menu
int menu(){
SinhVien sv;
LIST l;
int luachon;
Init(l);//Khoi tao danh sach NODE
do
{
printf("\n=====MENU=====");
printf("\n1. Nhap danh sach sinh vien");
printf("\n2. Hien danh sach sinh vien");
printf("\n3. Tim sinh vien");
printf("\n4. Xoa sinh vien");
printf("\n5. Tim sinh vien co diem cao nhat");
printf("\n6. Sap xep sinh vien theo diem so tang dan");
printf("\n0. Thoat");
printf("\nMoi ban chon chuc nang: ");
scanf("%d",&luachon);
switch(luachon)
{
case 1:
taods(l);
system("cls");
break;
case 2:
printf("\n=====Danh sach sinh vien=====");
printf("\nMa sv\tTen sv\tDiem sv");
hiends(l);
break;
case 3:
timsv(l,sv);
break;
case 4:
xoasv(l);
break;
case 5:
printf("\n=====THONG TIN SINH VIEN CO DIEM LON NHAT=====");
printf("\nMa sv\tTen sv\tDiem sv");
diemMAX(l);
break;
case 6:
printf("\n=====DANH SACH SINH VIEN SAU KHI SAP XEP=====");
printf("\nMa sv\tTen sv\tDiem sv");
sapxeptang(l);
break;
case 0:
break;
default:
printf("Ban da chon sai, vui long chon lai !");
}
}while(luachon!=0);
giaiphong(&l);
return 1;
}
int main(){
system("cls");
menu();
system("cls");
return 0;
}