30/09/2018, 19:32

[Struct] Con trỏ sử dụng trong hàm bổ sung thêm một sinh viên vào phía sau một sinh viên đã có trong danh sách

Chào anh chị em và các bạn trên diễn đàn, em mới học C, đang làm bài tập quản lý sinh viên.
Trong hàm themsau có 1 đoạn code em đọc mà chưa thực sự hiểu được ý nghĩa và tác dụng của nó , em post lên mong mọi người chỉ cho em ý nghĩa và tác dụng của nó ạ .
Đây là những đoạn code đó ạ :

  •       tim = tim->next;
    

ở đoạn code này em chưa hiểu vì sao lại có tim!=NULL

tiếp theo:

  •       tim->next = p;
    

ở đoạn code này thì em không hiểu được ý nghĩa thực sự của nó

  • Nhân tiện em muốn hỏi nốt là lúc chạy mặc dù em đã thêm đầy đủ các câu lệnh fflush(stdin); trước khi sử dụng hàm gets(). Nhưng ở hàm taods của em nó liên tục bị lỗi trôi lệnh, em sửa mãi không được, các anh chị và các bạn bỏ vào IDE chạy thử code rồi giúp em sửa lỗi trôi lệnh với ạ em cám ơn

đây là code của toàn bài ạ

//
//  main.c
//  quản lý sinh viên
//
//  Created by Việt Dũng Lê on 1/28/16.
//  Copyright © 2016 Việt Dũng Lê. All rights reserved.
//

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

typedef struct sinhvien{
    char hoten[30];
    int tuoi;
    float diemtrungbinh;
    struct sinhvien *next;
}sv;

sv *first,*last,*p;

void taods(){
    char tl,ht[30];
    int tuoi,i=0;
    float dtb;
    first=NULL;
    do{
        printf("
 PHIẾU NHẬP THÔNG TIN SINH VIÊN ");
        printf("
 Sinh viên thứ %d : ",i++);
        p=(sv *)malloc(sizeof(sv));
        fflush(stdin);
        printf("
 Nhập vào họ tên của sinh viên : ");
        fflush(stdin);
        gets(ht);
        strcpy(p->hoten,ht);
        printf("
 Nhập vào tuổi của sinh viên : ");
        scanf("%d",&tuoi);
        p->tuoi=tuoi;
        printf("
 Nhập vào điểm trung bình của sinh viên : ");
        scanf("%f",&dtb);
        p->diemtrungbinh=dtb;
        if(first==NULL){
            first=p;
            last=p;
        }
        else{
            last->next=p;
            last=p;
        }
        p->next=NULL;
        i++;
        fflush(stdin);
        printf("
 Tiếp tục nhập (y), Dừng nhập (n)");
        printf("
 Đáp án của bạn là  : ");
        fflush(stdin);
        tl=getchar();
    }while(tl!='n');
}

void xuat(){
    int i=0;
    printf("
 	 	 THÔNG TIN SINH VIÊN ");
    printf("
 STT 	 	 Họ Tên 	 	 Tuổi 	 	 Điểm Trung Bình ");
    p=first;
    while(p!=NULL){
        printf("
 %d 	 	 %s 	 	 %d 	 	 %f",++i,p->hoten,p->tuoi,p->diemtrungbinh);
        p=p->next;
    }
}

void themsau(){
    sv *tim;
    char ten[30];
    int tuoi;
    float diem;
    printf("
 THÊM SINH VIÊN VÀO PHÍA SAU MỘT SINH VIÊN ĐÃ CÓ TÊN TRONG DANH SÁCH");
    printf("
 Nhập tên của một sinh viên đã có tên trong danh sách : ");
    fflush(stdin);
    gets(ten);
    tim=first;
    while((tim!=NULL) && strcmp(tim->hoten,ten)){
        tim=tim->next;
        if(tim==NULL){
            printf("
 Tên của sinh viên bạn vừa nhập vào không có trong danh sách ");
        }
        else{
            p=(sv *)malloc(sizeof(sv));
            printf("
 Nhập tên của sinh viên bạn muốn bổ sung vào danh sách : ");
            fflush(stdin);
            gets(ten);
            printf("
 Nhập tuổi của sinh viên bạn muốn bổ sung vào danh sách : ");
            scanf("%d",&tuoi);
            p->tuoi=tuoi;
            printf("
 Nhập vào điểm trung bình của sinh viên bạn muốn bổ sung vào danh sách : ");
            scanf("%f",&diem);
            p->diemtrungbinh=diem;
            p->next=tim->next;
            tim->next=p;
            printf("
 Đã chèn xong");
        }
    }
}

int main(){
    char tl;
    do{
        printf("
 Phần mềm quản lý thông tin sinh viên ");
        printf("
 1.Nhập vào thông tin của sinh viên ");
        printf("
 2.In ra màn hình thông tin đã nhập ");
        printf("
 3.Bổ sung thêm sinh viên vào phía sau một sinh viên đã có tên trong danh sách ");
        printf("
 4.Thoát ");
        printf("
 Đáp án của bạn là : ");
        tl=getchar();
        fflush(stdin);
        switch(tl){
            case '1':taods(); break;
            case '2':xuat(); break;
            case '3':themsau(); break;
            case '4':printf("
 Cám ơn bạn đã sử dụng chương trình "); break;
            default: printf("
 Phím bạn vừa nhập vào không đúng, mời bạn nhập lại ");
        }
    }
    while(tl!='4');
}

Việt Dũng Lê viết 21:42 ngày 30/09/2018

upppp . Mọi người giúp em với ạ :((

Bài liên quan
0