Chương trình tự kết thúc sau khi nhập xong dữ liệu

Dạ anh chị cho em hỏi là khi em viết code xong rồi em chạy chương trình nhập được vài dữ liệu thì chương trình lại tự kết thúc ạ
VÍ DỤ như em viết 1 cái struct gồm
////Mã sv, Tên, Toán, Văn, Điểm trung bình////
Thì khi em chạy chương trình nhập xong dữ liệu của môn toán là chương trình nó end.
Anh chị có thể chỉ em các khắc phục được không ạ. Em cảm ơn.
Code:

#include<stdio.h>
#include<string.h>


struct SinhVien
{
    char MaSV[11];
    char Ten[150];
    float Toan;
    float CNTT;
    float DTB;
};

typedef struct SinhVien SV;

struct Node
{
    SinhVien data;
    Node* pNext;
};

typedef struct Node* PtrNode;

struct List
{
    Node* pHead;
    Node* pTail;
};

void KhoiTaoList(List &L) //Khoi tao dslk don
{
	L.pHead=NULL;
	L.pTail=NULL;
}

Node* Getnode(SV sv)
{
     Node* p;
     p=new Node;
     if(p== NULL)
     return NULL;
     p->data=sv;
     p->pNext=NULL;
     return p;
}

void NhapTTSV(SV &sv)
{
	printf("\nMSSV: "); fflush(stdin); gets(sv.MaSV);
	printf("\nTen SV: "); fflush(stdin); gets(sv.Ten);
	printf("\nDiem Toan: "); scanf("%f", sv.Toan);
	printf("\nDiem CNTT: "); scanf("%f", sv.CNTT);
	printf("\nDiem Trung Binh: "); scanf("%f", sv.DTB);
}

void AddHead(List &L, Node *p)
{
     if(L.pHead==NULL)
     {
          L.pHead=p;
          L.pTail=L.pHead;
     }
     else
     {
          p->pNext=L.pHead;
          L.pHead=p;
     }
}

void AddTail(List &L, Node *p)
{
    if(L.pTail==NULL)
    AddHead(L, p);
    else
    {
        p->pNext=L.pTail->pNext;
        L.pTail->pNext=p;
        L.pTail=p;
    }
}

void NhapDSSV(List &L, SV sv)
{
    int n;
    Node* p;
    printf("Nhap so luong sinh vien: ");
    scanf("%d", &n);
    for(int i=0; i<n; i++)
    {
        printf("nhap thong tin sinh vien thu %d: ", i+1);
        NhapTTSV(sv); 
        p=Getnode(sv);
        AddTail(L, p);
    }
}

void XuatTTSV(SV sv)
{
	printf("\n%s   %10s    %10f    %10f     %10f", sv.MaSV, sv.Ten, sv.Toan, sv.CNTT, sv.DTB);
}

void XuatDSSV(List L, SV sv)
{
	int i=1;
	for(Node* p=L.pHead; p!=NULL; p=p->pNext)
    {
    XuatTTSV(p->data);
    if(p!=L.pTail)
    i++;
    }
}

void HoanVi(SV &x, SV &y)
{
    SV t=x;
	   x=y;
	   y=t;
}

void SapXepDiem(List L)
{
    for(Node *p=L.pHead; p; p=p->pNext)
    for(Node *q=p->pNext; q; q=q->pNext)
    if(p->data.DTB > q->data.DTB)
    HoanVi(p->data, q->data);
}

int main()
{
	SinhVien sv;
	List L;
	NhapDSSV(L, sv);
	XuatDSSV(L, sv);
	SapXepDiem(L);
}

Thế mã bạn viết đâu?

3 Likes

Học tiếng anh + đọc mã/thông báo lỗi và search google là cách nhanh nhất

2 Likes

A post was merged into #1

Bạn truyền tham số vào scanf phải là con trỏ chứ &sv.Toan.

1 Like

ồ, em quên mất
em cảm ơn anh nha

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