密码字段中显示额外的字母

时间:2015-11-17 21:01:20

标签: c++ borland-c++

void createAccount(){

        int i=0;
        cout<<"\nEnter new Username: ";
        cin.ignore(80, '\n');
        cin.getline(newUsername,20);
        cout<<"\nEnter new Password: ";

        for(i=0;i<10,newPassword[i]!=8;i++){

            newPassword[i]=getch();    //for taking a char. in array-'newPassword' at i'th place
            if(newPassword[i]==13)     //checking if user press's enter
                break;                 //breaking the loop if enter is pressed
            cout<<"*";                 //as there is no char. on screen we print '*'
        }

     newPassword[i]='\0';       //inserting null char. at the end

     cout<<"\n"<<newPassword;
}

在功能createAccount();中,用户正在输入char newUsername[20]char newPassword[20]。但是,要将密码显示为******,我实施了另一种输入newPassword的方式。但是,当我尝试显示newPassword时,输出中有一个额外的字母,它在命令框中神奇地显示,而我没有输入任何内容。

输出

Enter new Username: anzam
Enter new Password: ****** //entered azeez but the first * is already there in command box without user inputting anything

Mazeez //displaying newPassword

如果有人能帮助我,我将非常感激。

2 个答案:

答案 0 :(得分:1)

您可能会混淆coniogetch)和iostreamcin),但它们可能无法同步。尝试在程序开头添加此行:

ios_base::sync_with_stdio ();

另外,在您看到13之前,您已经阅读了密码,但是,如果我没有弄错,实际上在Windows中按Enter会产生第一个10然后13,所以您可能希望将两者都检查为停止条件。

答案 1 :(得分:0)

i在循环结束时递增。解决此问题的最简单方法是将password初始化为零

char newPassword[20];
memset(newPassword, 0, 20);

for (i = 0; i < 10; )
{
    int c = getch();
    if (c == 13)
        break;

    //check if character is valid
    if (c < ' ') continue;
    if (c > '~') continue;

    newPassword[i] = c;
    cout << "*";
    i++; //increment here
}