Thắc mắc câu lệnh bị bỏ qua

Cho em hỏi em sai chỗ nào mà khi chạy nó bỏ qua nhập họ tên và bắt đầu cho nhập từ mã sv??

void nhaptungsinhvien(sinhvien&x,int n){
	for (int i=0;i<n;i++){
		printf("\nNhap ho va ten: ");
				gets(x.hoten);
		printf("\nMa SV: ");
				gets(x.ma);
		printf("\nGioi tinh (1=nam,0=nu): ");
		scanf("%d",&x.gioitinh);
		printf("\nNam sinh: ");
		scanf("%d",&x.namsinh);
		printf("\nDiem so: ");
		scanf("%f",&x.diem);
	}
}

Đây là lỗi dữ liệu nhập vào buffer nhưng đọc vào biến bị thiếu ký tự Enter.

http://forum.uit.edu.vn/threads/31294-C-Hoi-ve-string-rat-rat-co-ban-?s=668c9c8e73060c6f304e035635e5d926

1 Like

nhập số n trong hàm main và chạy hàm đó, nó dính dấu enter xuống dòng. cin.ignore(); để bỏ 1 cái thừa đi,
Trường họp này bị khi bạn đã nhập 1 số xong dùng hàm lấy nhưng chuỗi có luôn kí tự trắng như gets hay getline(std::cin,); nó sẽ lấy enter trước đó. :smiley: chúc bạn học tốt

1 Like

Code ở trên thuần ngôn ngữ C, không nên sử dụng cin.ignore() vì có thể gây nhiễu kiến thức cơ bản.
Một vài thầy cô trong khoa trường Duy Tân cũng có thói quen sử dụng song song C và C++ trong chương trình nên sinh viên cũng nhầm theo.

1 Like

em cảm ơn anh :smiley: dùng fflush(stdin) thì nó cho nhập rồi :smiley:

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