30/09/2018, 23:11

- Mọi người giúp em với ạ , Em sai chỗ hàm void NhapSV(LIST &l). Cái chỗ đưa dữ liệu vào node đó ạ

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
struct sv
{
    char hoten[30];
    char tuoi[10];
    char que[20];
    char msv[10];
    float diem;
    struct sv *pNext;
};
typedef struct sv SV;

struct list
{
    SV *pHead;
    SV *pTail;
};
typedef struct list LIST;

void Init(LIST &l)
{
    l.pHead = l.pTail = NULL;
}

SV *Get(char hoten[], char tuoi[], char que[], char msv[], float diem)
{
    SV *p = new sv;
    if (p == NULL)
    {
        return NULL;
    }
    else
    {
     strcpy(p->hoten, hoten); // sao chép chuỗi.
     strcpy(p->tuoi, tuoi);
     strcpy(p->que, que);
     strcpy(p->msv, msv);
     p->diem = diem;
     p->pNext = NULL;
     return p;
    }
}

void ThemDau(LIST &l, SV *p)
{
    if (l.pHead == NULL)
    {
        l.pHead = l.pTail = NULL;
    }
    else
    {
        p->pNext = l.pHead;
        l.pHead = p;
    }
}

void ThemCuoi(LIST &l, SV *p)
{
    if(l.pHead == NULL)
    {
        l.pHead = l.pTail = NULL;
    }
    else
    {
        l.pTail->pNext = p;
        l.pTail = p;
    }
}

// Them 1 phan tu p vào sau phần tử Q trong danh sách.

void ThemPhanTuSauQ(LIST &l, SV *p, SV *q)
{
        if(q != NULL)
        {
            p->pNext=q->pNext; //quăng dây trỏ đến sau phần tử q.
            q->pNext = p;// lưu p vào sau q.
            if(q == l.pTail)
            {
                l.pTail = q;
            }
        }
        else
        {
            ThemDau(l,p);
        }
}

void NhapSV(LIST &l)
{
    SV *p;
   int n,i;
   printf("Nhap so luong sinh vien");
   scanf("%d",&n);
   fflush(stdin);

   Init(l);
   for(i=1;i<=n;i++)
   {
       printf("
Nhap vao thong tin sinh vien thu %d : ",i);
       printf("
Nhap vao ho ten : ");
       gets(p->hoten);
       fflush(stdin);
       printf("
Nhap vao tuoi : ");
       gets(p->tuoi);
       fflush(stdin);
       printf("
Nhap vao Que Quan : ");
       gets(p->que);
       fflush(stdin);
       printf("
Nhap vao Ma Sinh Vien : ");
       gets(p->msv);
       fflush(stdin);
       printf("
Nhap vao diem : ");
       scanf("%f",&p->diem);
       fflush(stdin);
       SV *p = Get(p->hoten,p->tuoi,p->que,p->msv,p->diem);
       ThemCuoi(l,p);
   }
}

void Xuat(LIST l)
{
    printf("%-20s %-10s %-15s %-5s %-8s", "Ten","Tuoi", "Que Quan","MSV","Diem");
    for (SV *p = l.pHead; p != NULL ; p=p->pNext)
    {
        printf("%-20s %-10s %-15s %-5s %-8f", p->hoten,p->tuoi,p->que,p->msv,p->diem);
    }
}


int main(int argc, char* argv[])
{
    LIST l;

    NhapSV(l);
    Xuat(l);
    getch();
    return 0;
}
  • Cú pháp để đưa dữ liệu vào Node CỦA Ngôn Ngữ C là sao ạ. ai giúp em chỗ hàm NhapSV với.
Quân viết 01:23 ngày 01/10/2018
void ThemDau(LIST &l, SV *p){
    if (l.pHead == NULL)
    {
        l.pHead = l.pTail = NULL;
    } else{
        p->pNext = l.pHead;
        l.pHead = p;
    }
}

void ThemCuoi(LIST &l, SV *p){
    if(l.pHead == NULL){
        l.pHead = l.pTail = NULL;
    } else{
        l.pTail->pNext = p;
        l.pTail = p;
    }
}

Cả 2 hàm trên đều sai cùng 1 nơi.

 if (l.pHead == NULL) {
   l.pHead = l.pTail = NULL;
} else {...}

bạn viết thế này, trong trường hợp list mới khởi tạo thì phần tử mới sẽ biết phải thêm vào đâu. Theo mình thì nên sửa lại thành.

 if (l.pHead == NULL){
    l.pHead = l.pTail = p;
} else {...}
Nguyễn Minh Nhật viết 01:16 ngày 01/10/2018

ok thanks ban, vay cai ham NhapSV cua minh khong sai ha~

Bài liên quan
0