em có 1 chương trình nhỏ sau
Viết 1 chương trình nhập mật khẩu, mk không quá 10 kí tự, kiểm tra tính đúng sai(mk gốc được đặt sẵn)
khi nhập in ra các kí tự * để bảo vệ mk người dùng. Chương trình cho phép nhập tối đa 3 lần.
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
main()
{
string pwRoot = "12345678";
string pwUser;
cout<<"Nhap Password"<<endl;
int limit =0;
while (limit <3)
{
int i=0;
char a=getch();
while ( a!= 13 && a!= 10 && i<10)
{
if (a != 8 )
{
cout<<'*';
pwUser[i++]=a;
a=getch();
}
// problem here !!!
}
pwUser[i] = '\0';
if ( pwRoot == pwUser )
{
cout<<endl;
cout<<"mk ban nhap la"<<pwUser<<endl;
cout<<"Mat khau dung"<<endl;
break;
}
else
{
cout<<endl<<"Mat khau sai, Nhap lai"<<endl;
limit++;
}
}
if (limit > 2 ) cout <<"Nhap sai 3 lan, vui long thu lai sau"<<endl;
system("pause");
return 0;
}
em đang thắc mắc làm thế nào để loại bỏ kí tự backspace nhưng nó vẫn hoạt động
nếu e để vòng
while ( a!= 13 && a!= 10 && i<10 && a!= 8);
thì nó nhận được kí tự backspace nó sẽ thoát luôn, không để điều kiện a!=8 thì nó lại nhận cả kí tự backspace vào chuỗi mật khẩu pwUser
e thêm điều kiện
if (a != 8 )
{
cout<<'*';
pwUser[i++]=a;
a=getch();
}
thì vấn đề nảy sinh thêm là, khi nhận kí tự backspace nó sẽ k ghi vào xâu pwUser , nhưng lại k biết thực hiện gì, nếu e dùng continue thì sẽ bị nhận thiếu số kí tự bằng số lần bấm backspace,
mà ví dụ khi gõ sai muốn xóa gõ lại, bấm backspace nên việc loại bỏ space nhưng vẫn để nó hoạt động là cần thiết, e đã tính đến trường hợp xóa đi 1 phần tử trong chuỗi pwUser khi mà ng dùng nhập 1 kí tự backspace, tương tự xóa n kí tự trong mảng đó khi nhập n kí tự space cho đến khi hết , nhưng kí tự khi xóa xong, trong mảng sẽ giảm số phẩn tử, nhưng trên màn hình, dấu * in ra lại k thể mất. vây phải làm sao ạ. Xincamon