Code về thông tin người chỉ chạy 1 lần hàm getDetail

Mấy anh cho em hỏi 1 chút. Em có chương trình em viết như này. Nhưng khi chạy, chỉ có 1 hàm getDetail được chạy. Trong khi đóem gọi cả 2 hàm. Ai biết giúp em với ạ !!

#include <iostream>
using namespace std;

typedef struct Person
{
	char name[50];
	int  age;
	float salary;
}Per;


void getDetail(Per *a)
{
	static int i = 1;
	cout << "Nhap du lieu cho nguoi thu " << i;
	i++;
	cout << "\nNhap ten: ";
	cin.get(a->name, 50);
	cout << "\nNhap so tuoi ";
	cin >> a->age;
	cout << "\nNhap muc luong ";
	cin >> a->salary;
}


inline void printDetail(Per *a)
{
	cout << "Name: " << a->name << endl;
	cout << "Age: " << a->age << endl;
	cout << "Salary: " << a->salary << endl;
}
void (*gDe)(Per*)= getDetail;

int main()
{
	Per P1, P2;
	Per* pP1 = &P1;
	Per* pP2 = &P2;
	//Per* pP2 = &P2;
	(*gDe)(pP1);
	(*gDe)(pP2);
	/*getDetail(pP1);*/
	printDetail(pP1);
	printDetail(pP2);
	return 0;
}

Có gọi mà, bạn không thấy nó vẫn xuất các câu yêu cầu nhập cho người thứ 2 đấy thôi. Vấn đề là do phần nhập, có một số dữ liệu bạn nhập vào làm cho nó tưởng rằng bạn đã nhập nên nó lấy luôn, thành ra tên thì trống không, còn tuổi và lương thì lại âm kinh khủng. :rofl:
Mà bạn dùng cin.get() xem ra cũng không ổn. Khuyến khích dùng cin.getline() hoặc getline().

2 Likes

Em cảm ơn anh ạ. Em có thay cin.get() thành cin.getline() rồi. Đúng là có thể điền được thông tin thật. Nhưng thông tin tên người thứ 2 vẫn bị bỏ qua anh ạ. CHỉ có thể điền tử tuổi người thứ 2 thôi ạ! Anh còn giải pháp nào về vấn đề này không ạ ?

Em sửa được rồi anh ạ. Dù chưa rõ tại sao nhưng mà em thêm hàm getchar() vào giữa 2 hàm getDetail đấy. Vậy là nó không bị nhảy qua nữa ạ. Em cảm ơn anh nhiều. Không biết có phải bị đầy bộ nhớ không nữa @@

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