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 << "\nNhap ma so hoc sinh:";
	//gets(x->maSo); 
	gets_s(x->maSo);
	fflush(stdin);
	cout << "\nNhap ten hoc sinh :";
	gets_s(x->tenHS);
	do 
	{
		cout << "\nMoi ban nhap diem Hoa cho hoc sinh :";
		cin >> x->diemHoa;
		if (x->diemHoa<0 || x->diemHoa>10)
		{
			cout << "\nDiem Hoa ban nhap ko hop le vui long kiem tra lai!!!";
		}
	} while (x->diemHoa<0||x->diemHoa>10);
	do
	{
		cout << "\nMoi ban nhap diem Hoa cho hoc sinh :";
		cin >> x->diemLy;
		if (x->diemLy<0 || x->diemLy>10)
		{
			cout << "\nDiem Ly ban nhap ko hop le vui long kiem tra lai!!!";
		}
	} while (x->diemLy<0 || x->diemLy>10);
	do
	{
		cout << "\nMoi ban nhap diem Hoa cho hoc sinh :";
		cin >> x->diemToan;
		if (x->diemToan<0 || x->diemToan>10)
		{
			cout << "\nDiem Toan ban nhap ko hop le vui long kiem tra lai!!!";
		}
	} while (x->diemToan<0 || x->diemToan>10);

}
void xuatThongTinHocSinhL(HOCSINH *x)
{
	cout << "\n\t\tThong tin hoc sinh : \n";
	cout << "\nMa so hoc sinh : " << x->maSo;
	cout << "\nTen hoc sinh : " << x->tenHS;
	cout << "\nDiem toan : " << x->diemToan;
	cout << "\nDiem Ly : " << x->diemLy;
	cout << "\nDiem 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 << "\nDiem trung binh : " << diemTrungBinh;
	system("pause");
	return 0;
}

lỗi như sau :

Error	3	error C4700: uninitialized local variable 'x' used	d:\visual studio 2013\projects\struct\danh sach hoc sinh\main.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

Theo mình là nhapthongtin(hocsinh*&)
thay bằng nhapthontin(hocsinh*) và để đoạn x=new hocsinh ở hàm main

3 Likes

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 *&) thi

thế lỗi là gì vậy gió ?

Lý do là vì khi em truyền con trỏ x vào hàm nhapThongTinHocSinh 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é.

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