30/09/2018, 16:15
Xin trợ giúp về struct danh sách học sinh
hocsinh.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
#pragma pack(1)
struct hocsinh
{
char maSo[20];
char tenHS[20];
float diemToan, diemLy, diemHoa;
};
typedef struct hocsinh HOCSINH;
void nhapThongTinHocSinh(HOCSINH *);
void xuatThongTinHocSinhL(HOCSINH *);
float tinhDiemTrungBinh(HOCSINH *);
hocsinh.cpp
#include"hocsinh.h"
void nhapThongTinHocSinh(HOCSINH *&x)
{
x = new HOCSINH;
fflush(stdin);
cout << "
Nhap ma so hoc sinh:";
//gets(x->maSo);
gets_s(x->maSo);
fflush(stdin);
cout << "
Nhap ten hoc sinh :";
gets_s(x->tenHS);
do
{
cout << "
Moi ban nhap diem Hoa cho hoc sinh :";
cin >> x->diemHoa;
if (x->diemHoa<0 || x->diemHoa>10)
{
cout << "
Diem Hoa ban nhap ko hop le vui long kiem tra lai!!!";
}
} while (x->diemHoa<0||x->diemHoa>10);
do
{
cout << "
Moi ban nhap diem Hoa cho hoc sinh :";
cin >> x->diemLy;
if (x->diemLy<0 || x->diemLy>10)
{
cout << "
Diem Ly ban nhap ko hop le vui long kiem tra lai!!!";
}
} while (x->diemLy<0 || x->diemLy>10);
do
{
cout << "
Moi ban nhap diem Hoa cho hoc sinh :";
cin >> x->diemToan;
if (x->diemToan<0 || x->diemToan>10)
{
cout << "
Diem Toan ban nhap ko hop le vui long kiem tra lai!!!";
}
} while (x->diemToan<0 || x->diemToan>10);
}
void xuatThongTinHocSinhL(HOCSINH *x)
{
cout << "
Thong tin hoc sinh :
";
cout << "
Ma so hoc sinh : " << x->maSo;
cout << "
Ten hoc sinh : " << x->tenHS;
cout << "
Diem toan : " << x->diemToan;
cout << "
Diem Ly : " << x->diemLy;
cout << "
Diem Hoa : " << x->diemHoa;
}
float tinhDiemTrungBinh(HOCSINH *x)
{
return (x->diemHoa + x->diemLy + x->diemToan) / 3;
}
main.cpp
#include "hocsinh.h"
int main(int argc, char **argv)
{
HOCSINH *x;
nhapThongTinHocSinh(x);
xuatThongTinHocSinhL(x);
float diemTrungBinh = tinhDiemTrungBinh(x);
cout << "
Diem trung binh : " << diemTrungBinh;
system("pause");
return 0;
}
lỗi như sau :
Error 3 error C4700: uninitialized local variable 'x' used d:visual studio 2013projectsstructdanh sach hoc sinhmain.cpp 5 1 danh sach hoc sinh
trong khi hàm nhập học sinh đã dùng tham chiều và hàm main gọi là 1 giá trị theo nguyên tắc thì đúng rồi
Bài liên quan
Theo mình là nhapthongtin(hocsinh*&)
thay bằng nhapthontin(hocsinh*) và để đoạn x=new hocsinh ở hàm main
gió ơi mình đang test thử cấp phát tại hàm nhậpthông tin luôn. nghe nói thì cấp ở main là ổn nhất
@ltd em cấp phát bộ nhớ trong main thì ko sao mà sao trực tiếp trong hàm rồi tham chiếu lại thì ko được vậy anh?
Neu ma cap tai ham
void nhapThongTinHocSinh(HOCSINH *&)
thithế lỗi là gì vậy gió ?
Lý do là vì khi em truyền con trỏ
x
vào hàmnhapThongTinHocSinh
thì chỉ có bản copy của con trỏx
được truyền vào. Chứ không phải là bản thân của con trỏx
được truyền vào.Ở bài này @Dung_Kon đã đưa ra một vấn đề tương tự, anh đã giải thích, em nghiên cứu thử nhé.