Làm sao đổi các kí tự vừa nhập vào thành * như khi nhập mật khẩu?

Mình đang viết cái chương trình nhập vào tài khoản và mật khẩu rồi kiểm tra đúng hay sai để đăng nhập, nhưng đến khi chạy thì thấy không hài lòng cho lắm vì mật khẩu vẫn hiện trơ trơ ra ngoài màn hình :cry: :cry:. Vậy nên mình muốn hỏi có hàm hoặc lệnh nào chuyển các kí tự vừa nhập vào trên màn hình thành kí tự * (giống như ghi mk vào trên các trang web) hoặc sau khi nhấn Enter thì toàn bộ phần vừa nhập chuyển thành ‘***…’. Mình xin cảm ơn trước

đây bạn :smiley:

string password = "";
char c;
do {
        c = getch(); // dùng hàm getch() để nhận kí tự vào biến c đã khai báo trước
        cout << "*"; // in ra kí tự như mật khẩu
        password += c; // cộng biến c vào password
} while (c!=13); // kiểm tra xem biến c có bằng enter không

đống này mình lấy từ một cái chương trình cũ giống bạn :slight_smile:
bạn nhớ đọc mấy dòng mình comment nha. :smile:

8 Likes

Cảm ơn nha:relaxed::relaxed: hàm của bạn dễ hiểu dễ nhớ :))

Mà mình làm hàm y chang của bạn mà sao lại có dấu cách giữa các kí tự trong biến password? cái này là do hàm cộng nó như vậy và mình phải thủ công xóa dấu cách hay là do mình làm sai gì rồi?

#include <iostream>
#include <string>
#include <windows.h>
#include <conio.h>
using namespace std;

const string tk = "asdfgh";
const string mk = "qwerty";

int main()
{
	string tkc, mkc=""	;
	do
	{
		fflush(stdin);
		cout << "Nhap tai khoan va mat khau de dang nhap.\n";
		Sleep(1000);
		cout << "-Tai khoan: "; getline(cin, tkc);
		fflush(stdin);
		cout << "-Mat khau: "; 
		char i;
		do
		{
			fflush(stdin);
			i = _getch();
			cout << "*";
			mkc += i;
		} while (i != 13);
		if (tkc != tk || mkc != mk) cout << "\nTai khoan hoac mat khau khong dung, vui long nhap lai\n";
	} while (tkc != tk || mkc != mk);
	cout << "\nBan da dang nhap thanh cong!\n";
	system("pause");
}

Ở chỗ mkc điền “qwerty” vào thì lại ra "q w e r t y "

Thấy có sao đâu.

2 Likes

Dạng này thì phải dùng hàm của <conio.h> (tức là ko dùng hàm chuẩn, vì nó toàn dùng buffer) :smiley:

fflush(stdin) bỏ lâu oy`, dùng chung ko đảm bảo đâu.

2 Likes

Kì rứa @@ để m xem lại.

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