Ввод пароля всегда возвращает «не соответствует» - PullRequest
1 голос
/ 08 февраля 2020

Я учусь C прямо сейчас.

Я работаю над программой, которая будет проверять ввод пользователя (допустимость пароля). Чтобы пароль считался подходящим и достаточно надежным, он должен иметь хотя бы один из списка следующих элементов:

  • Прописная буква;
  • знак '$' ;
  • Буквенно-цифровой символ;

В моей программе я создал три целочисленные переменные, которые будут вести подсчет вышеперечисленных требований.

К сожалению, всякий раз, когда я вводю " «правильная» версия пароля, программа продолжает печатать, что пароль недопустим.

Пожалуйста, дайте мне подсказку, где я могу ошибаться.

//challenge: 
//build a program that checks when user enters a password for an uppercase letter, a number, and a dollar sign.
//if it does output that password is good to go.

int main()
{
    char passwordInput[50];
    int alphaNumericCount = 0;
    int upperCharacterCount = 0;
    int dollarCount = 0;

    printf("Enter you password:\n");
    scanf(" %s", passwordInput);

    //int charactersAmount = strlen(tunaString);

    for (int i = 0; i < 49; i++){
        //tunaString[i]

        if( isalpha(passwordInput[i]) ) {
            alphaNumericCount++;
            //continue;
        }else if( isupper(passwordInput[i]) ) {
            upperCharacterCount++;
            //continue;
        }else if( passwordInput[i] == '$' ) {
            dollarCount++;
            //continue;
        }
    }

    if( (dollarCount == 0) || (upperCharacterCount == 0) || (alphaNumericCount == 0) ){
        printf("Your entered password is bad. Work on it!\n");
    }else{
        printf("Your entered password is good!\n");
    }

    return 0;
}

1 Ответ

1 голос
/ 08 февраля 2020

Функция isalpha возвращает значение true, если символ имеет верхний или нижний регистр. Вы делаете это до состояния, которое вызывает isupper. Поскольку верхний регистр будет удовлетворять первому условию, второе условие никогда не будет оцениваться как true.

Поскольку верхний регистр является подмножеством alphanumeri c, вам необходимо пересмотреть свои требования. Если вместо этого вы хотите проверить (например):

  • заглавные буквы
  • цифры c
  • "$"

Тогда у вас будет одно условие использования isupper, одно использование isdigit и одно сравнение с '$'.

Кроме того, вы пропустите oop через все элементы массива passwordInput, даже если они не все населены. Вместо тестирования i<49 используйте i<strlen(passwordInput).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...