30/09/2018, 16:28

Trôi lệnh khi nhập chuỗi

Cho em hỏi code của em tại sao lúc chạy chương trình nó không cho nhập tên nhân viên vào mà chuyển sang nhập mã nhân viên.

#include <iostream>
using namespace std;

struct nhanvien
{
	char manv[8];
	char ten[20];
	char phongban[10];
	int luong;
	int thuong;
	int thuclanh;
};
typedef nhanvien NHANVIEN;

int i;

int KiemTra(char*m, int a, int b);
void Nhap(NHANVIEN nv[], int n);

void main()
{
	int n = KiemTra("Nhap so nhan vien: ", 1, 100);
	NHANVIEN nv[100];
	Nhap(nv, n);
	system("pause");
}

int KiemTra(char*m, int a, int b)
{
	int n;
	do{
		cout << m;
		cin >> n;
		if (n<a || n>b)
			cout << "Nhap tu " << a << " den " << b << endl;
	} while (n<a || n>b);
	return n;
}

void Nhap(NHANVIEN nv[], int n)
{
	for (i = 0; i < n; i++)
	{
		cout << "Ten nhan vien: ";
		gets_s(nv[i].ten);
		cout << "Ma nhan vien: ";
		gets_s(nv[i].manv);
		cout << "Phong ban: ";
		gets_s(nv[i].phongban);
		cout << "Luong co ban: ";
		cin >> nv[i].luong;
		cout << "Thuong: ";
		cin >> nv[i].thuong;
		cout << "Thuc lanh: ";
		cin >> nv[i].thuclanh;
	}
}
X viết 18:34 ngày 30/09/2018

gửi code giống comment trên FB quá :)) assmin vào edit lại đi @ltd =))

Quân viết 18:40 ngày 30/09/2018

Do chế độ “trôi lệnh” nên vậy. Khi nhập số lượng nhân viên là bạn nhập 1 số và 1 cái phím enter, enter nó không được đọc vì nó là ký tự mà đưa vào bộ đệm, khi nhập tên, máy đọc trong bộ đệm xem có cái gì phù hợp với kiểu của tên (chuỗi) và nó lấy luôn cái enter đó

Khắc phục, sau khi nhập số thì nên xóa bộ đệm bằng lệnh fflush(stdin);

Lần sau bạn post code cho đẹp tý.
Đặt tiêu đề bài viết cũng sát hơn 1 tý. VD như không nhập được tên nhân viên,…hoặc chuẩn hơn thì trôi lệnh nhập chuỗi, …

Hung Nguyen Minh viết 18:39 ngày 30/09/2018

@david15894 @nguyenvanquan7826 e sẽ rút kinh nghiệm post bài

@nguyenvanquan7826 cảm ơn anh.

Bài liên quan
0