如何在C ++中密码满足条件之前保持循环?

时间:2016-01-16 22:28:18

标签: c++ function loops pass-by-reference do-while

我正在尝试继续循环以要求用户输入新密码,直到满足条件。将此新密码与传递给此函数的旧密码进行比较。条件是,新旧密码的前半部分不能相同而且新旧密码的后半部分不能相同。如果满足此条件,则旧密码将更改为新密码。到目前为止,我有这个,但它只能工作一次,并且在条件满足之前不会循环请求新密码。有没有办法让这个保持循环,直到新密码通过条件?

bool changePasswordintonewPW(string& oldpassword)
{
string newPW;
int sizeN;
int half;
int lengtholdPW;
int lengthnewPW;


do
{
    cout << "Enter a new password that must meet condition: ";
    getline(cin, newPW);


    lengthnewPW = newPW.length();
    lengtholdPW = oldpassword.length();
    if (lengthnewPW < lengtholdPW)
    {
        sizeN = lengthnewPW;
    }
    else if (lengtholdPW < lengthnewPW)
    {
        sizeN = lengtholdPW;
    }
    else
        sizeN = lengtholdPW;

    half = sizeN / 2;

    if( ( oldpassword.size() <= 2 ) ||
        ( ( oldpassword.substr( 0, half ) != newPW.substr( 0, half ) ) &&
          ( oldpassword.substr( oldpassword.size() - half ) != newPW.substr( newPW.size() - half ) ) ) )
        return true;

          {
            cout << "The new password cannot start or end with " << half
                 << " or more characters that are the same as the old password" << endl << endl;

          }


} while (( oldpassword.size() <= 2 ) ||
        ( ( oldpassword.substr( 0, half ) != newPW.substr( 0, half ) ) &&
          ( oldpassword.substr( oldpassword.size() - half ) != newPW.substr( newPW.size() - half ) ) ) );


    oldpassword = newPW;
    return true;

 }

1 个答案:

答案 0 :(得分:1)

您的while条件与密码为真的条件相同。您必须在密码为时设置它。加!到了条件。