Bài tập về quản lí thông tin sinh viên chỉ nhập được lần đầu tiên

Em mới học ctdl&gt thì gặp bài này, mọi người cho e hỏi e sai ở đâu khi vòng for chạy chỉ nhập được lần đầu tiên ạ, em cảm ơn

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

struct SinhVien {
	char malop[100];
	int masv;
	char ten[100];
	int namsinh;
	char quequan[100];
};

typedef SinhVien sinhvien;

void nhapsv(sinhvien &sv){
	fflush(stdin);
	printf("\nNhap ten sinh vien: ");
	gets(sv.ten);
	fflush(stdin);
	printf("Nhap mssv: ");
	scanf("%d", &sv.masv);
	fflush(stdin);
	printf("Nhap ma lop: ");
	gets(sv.malop);
	fflush(stdin);
	printf("Nhap nam sinh: ");
	scanf("%d", &sv.namsinh);
	fflush(stdin);
	printf("Nhap que quan: ");
	gets(sv.quequan);
}

void xuatsv(sinhvien sv){
	printf("\nHo ten sv: %s", sv.ten);
	printf("\nMssv: %d", sv.masv);
	printf("\nMa lop: %s", sv.malop);
	printf("\nNam sinh: %d", sv.namsinh);
	printf("\nQue quan: %s", sv.quequan);
}


struct node {
	sinhvien data;
	node *next;
};

struct list {
	node *pHead;
	node *pTail;
};

void khoitao(list &l){
	l.pHead = NULL;
	l.pTail = NULL;
}

node* newnode (sinhvien sv){
	node *p = new node;
	p->data =sv;
	p->next = NULL;
}

void themcuoi(list &l, node *p){
	l.pTail->next =p;
	l.pTail =p;
}

void xuat(list l){
	for(node *k = l.pHead; k!=NULL; k = k->next){
		xuatsv(k->data);
		printf("\n");
	}
}

main(){
	list l;
	khoitao(l);
	int n;
	printf("Nhap so sinh vien: ");
	scanf("%d", &n);
	for(int i =0; i<n; i++){
		sinhvien sv;
		printf("\nNhap thong tin sinh vien %d", i+1);
		nhapsv(sv);
		node *p = newnode(sv);
		themcuoi(l,p);
	}
	xuat(l);
	getch();
}

:point_right: typedef struct SinhVien sinhvien;

:point_right: struct node *next;

Cả phần bên dưới nữa. node type chưa define nên phải dùng là struct node.

Còn không thì phải define.

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