-1

このパスワード検証プログラムを作成しようとしていますが、最初は無限ループに陥っています。とてもイライラします。私はこれに約 1 日半取り組んできました... プログラムの目的は、パスが少なくとも 6 文字の長さであり、上位 1 文字、下位 1 文字、および 1 桁も含まれていることを保証することです。

#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;


bool testPass(char []);
int main()
{
    char *password;
    int length; 
    int num; 

    cout << "Please enter how many characters you would like your\npassword to be.";
    cout << " Your password must be at least 6 characters long." << endl;
    cin >> num;


     while(num < 6)
     {
        cout << "Please enter a password length of at least 6 characters." << endl;
        cin >> num;
     }


    password = new char[num+1]; 


    cout << "Please enter a password that contains at least one uppercase letter, ";
    cout << "one\nlowercase letter, and at least one digit." << endl;


    cin >> password;


    length = strlen(password);



    while (length != num)
    {
        cout << "Your password is not the size you requested. ";
        cout << "Please re-enter your password." << endl;
        cin >> password;
        length = strlen(password);
    }

    if (testPass(password))
        cout << "Your password is valid." << endl;
    else
    {
        cout << "Your password is not valid. ";
        cout << "Please refer to the above warning message." << endl;
    }

    delete[] password;

    system("pause");
    return 0;
}



bool testPass(char pass[])
{
    bool aUpper = false,
         aLower = false,
         aDigit = false ;
    for ( int i = 0 ; pass[i] ; ++i )
        if ( isupper(pass[i]) )
            aUpper = true ;
        else if ( islower(pass[i]) )
            aLower = true ;
        else if ( isdigit(pass[i]) )
            aDigit = true ;
    if ( aUpper && aLower && aDigit )
        return true;
    else
        return false ;
}
4

2 に答える 2

0

少なくとも 6 文字の長さが必要な<=場合は、while ループを にする必要があります while(num <= 6)

于 2013-07-26T15:37:09.547 に答える
0
int num; 
cin >> num;

上記のコードは数値を要求し、それを num に格納します。これはあなたが望むものではありません。パスワードを文字列に保存し、必要に応じて長さとその他のプロパティを確認する必要があります。

cin >> str;

空白文字が見つかるとすぐに読み取りを停止しますが、これは私たちが望んでいるものではありません。

http://www.cplusplus.com/doc/tutorial/basic_io/をご覧ください。

解決策は、次のコードである可能性があります。

string password;
bool valid = false;

while (!valid) {
    getline(cin, password);
    valid = password_valid(password);
    if (!valid) {
        // display error message
    }
}

// password is valid
于 2013-07-26T15:35:03.527 に答える