C ++密码屏蔽

时间:2010-03-26 11:14:10

标签: c++ input passwords masking

我正在编写接收密码输入的代码。下面是我的代码...程序运行良好,但问题是除了数字和字母字符之外的其他键也被读取,例如删除,插入等等我能否知道如何避免它? TQ ...

string pw="";
char c=' ';

while(c != 13) //Loop until 'Enter' is pressed
{
    c = _getch();
    if(c==13)
        break;

    if(c==8)
    {
        if(pw.size()!=0)   //delete only if there is input 
        {
            cout<<"\b \b";
            pw.erase(pw.size()-1);
        }
    }

    if((c>47&&c<58)||(c>64&&c<91)||(c>96&&c<123))  //ASCii code for integer and alphabet
    {
        pw += c;
        cout << "*";
    }
}

2 个答案:

答案 0 :(得分:7)

使用isalnum()过滤字母数字或isalpha()仅限字母。

此外,您正在检查c == 13两次,以下就足够了。

while(1){
  //
  if(c == 13)
    break;
  //
}

if( isalnum(c) ){
  // 'c' is acceptable
}

某些断言在执行期间失败,从而引发该错误。

答案 1 :(得分:1)

如果您可以访问它,那么使用GNU getpass功能会更好。