#include "stdafx.h"
#include "conio.h"
#include "iostream"
#include "stdio.h"
struct SinhVien
{
char strMSSV[9];
char strHoTen[30];
char strNamSinh[5];
float fDiemTrungBinh;
};
struct SinhVienNode
{
SinhVien info;
SinhVienNode * pNext;
};
struct List
{
SinhVienNode * pHead;
SinhVienNode * pTail;
};
void XuatDanhSach(SinhVienNode * p);
void init(List & L);
SinhVienNode * getNode(char MSSV[9], char HoTen[30], char NamSinh[5], float DiemTrungBinh);
void addFirst(List & l, SinhVienNode * p);
void addTail(List & l, SinhVienNode * p);
SinhVienNode * insertHead (List & l, char MSSV[9], char HoTen[30], char NamSinh[5], float DiemTrungBinh);
SinhVienNode * insertTail (List & l, char MSSV[9], char HoTen[30], char NamSinh[5], float DiemTrungBinh);
void addAfter(List & l, SinhVienNode * q, SinhVienNode *p);
void main()
{
List lop18TH01;
int a, b;
init(lop18TH01);
do
{
printf("Nhap so luong sinh vien muon them: ");
scanf_s("%d", &a);
}
while (a < 1);
printf("\n");
SinhVienNode * p;
char strMSSV[9];
char strHoTen[30];
char strNamSinh[5];
float fDiemTrungBinh;
for (int i=1; i<=a; i++)
{
printf("Sinh vien thu %d:", i);
printf("Nhap vao MSSV: ");
scanf_s("%s", &p->info.strMSSV);
printf("Nhap vao ho va ten: ");
scanf_s("%s", &p->info.strHoTen);
printf("Nhap vao nam sinh: ");
scanf_s("%s", &p->info.strNamSinh);
printf("Nhap vao diem trung binh: ");
scanf_s("%f", &p->info.fDiemTrungBinh);
p = getNode(strMSSV, strHoTen, strNamSinh, fDiemTrungBinh);
addTail(lop18TH01, p);
}
/*
_getch();
system("cls");
do
{
printf("1 \t\n");
printf("2 \t\n");
printf("3 \t\n");
printf("4 \t\n");
printf("5 \t\n");
printf("0 \t\n");
printf("Chon: ");
scanf_s("%d", &b);
system("cls");
switch (b)
{
case 1:
break;
case 2:
_getch(); break;
case 3:
_getch(); break;
case 4:
_getch(); break;
case 5:
_getch(); break;
};
system("cls");
}
while (a != 0);
*/
_getch();
}
void XuatDanhSach(SinhVienNode * p)
{
printf("%s - %s - %s - %.1f\n", p->info.strMSSV, p->info.strHoTen, p->info.strNamSinh, p->info.fDiemTrungBinh);
}
void init(List & l)
{
l.pHead = l.pTail = NULL;
}
SinhVienNode * getNode(char MSSV[9], char HoTen[30], char NamSinh[5], float DiemTrungBinh)
{
SinhVienNode * p = new SinhVienNode;
if (p == NULL)
return NULL;
strcpy_s (p->info.strMSSV, MSSV);
strcpy_s (p->info.strHoTen, HoTen);
strcpy_s (p->info.strNamSinh, NamSinh);
p->info.fDiemTrungBinh = DiemTrungBinh;
p->pNext = NULL;
return p;
}
void addFirst(List & l, SinhVienNode * p)
{
if (l.pHead == NULL)
l.pHead = l.pTail = p;
else{
p->pNext = l.pHead;
l.pHead = p;
}
}
void addTail(List & l, SinhVienNode * p)
{
if (l.pHead == NULL)
l.pHead = l.pTail = p;
else
{
l.pTail->pNext = p;
l.pTail = p;
}
}
SinhVienNode* insertHead(List & l, char MSSV[9], char HoTen[30], char NamSinh[5], float DiemTrungBinh)
{
SinhVienNode * p = getNode (MSSV, HoTen, NamSinh, DiemTrungBinh);
if (p != NULL)
{
addFirst (l, p);
return p;
}
return NULL;
}
SinhVienNode * insertTail (List & l, char MSSV[9], char HoTen[30], char NamSinh[5], float DiemTrungBinh)
{
SinhVienNode * p = getNode (MSSV, HoTen, NamSinh, DiemTrungBinh);
if (p != NULL)
{
addTail (l, p);
return p;
}
return p;
}
void addAfter(List & l, SinhVienNode * q, SinhVienNode *p)
{
if (q != NULL)
{
p->pNext = q->pNext;
q->pNext = p;
}
if (q = l.pTail)
l.pTail = p;
addFirst(l, p);
}
Lỗi C4700: uninitialized local variable 'p' used
Biến p (đoán là kiểu con trỏ ) của bạn đã được sử dụng trước đó.
Bạn debug chương trình rồi chỉ vị trí lỗi mọi người mới giúp được bạn chứ nhỉ ?
1 Like
Mình thử Debug nhưng không chạy được luôn. Vừa ấn là nó báo lỗi ngay 
Gán p = NULL là được rồi bạn, lỗi này xảy ra khi bạn không khởi tạo gía trị của biến mà pass by value. Nhưng tốt nhất là nên khởi tạo gía trị trong mọi trường hợp.
1 Like
Mình gán NULL cho p xong rồi chạy thì vẫn còn lỗi khác là uninitialized local variable ‘fDiemTrungBinh’ used. Sửa sao cho hết đây bạn?
thì tiếp tục gán cho nó
fDiemTrungBinh = 0 chẳng hạn
1 Like
Ô. Chạy được rồi. Hay quá. Cảm ơn bạn nhiều nhiều
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?