как использовать bool, если операторы while и операторы используются для проверки правильности ввода данных пользователем - PullRequest
0 голосов
/ 01 мая 2018

Я пытался создать проверку пароля с помощью следующего кода ниже.

bool alpha = false;
bool digit = false;
bool nogo = true;
char pass[99];
int len;
len = strlen(pass);
int i, x;

while(nogo){

printf("Password checker 1.1\n");

printf("Please enter a password you would like to test.\n");
scanf("%s\n", pass);
printf("%d\n", len);

    if(len<8){
        printf("Your password is too short. Please re-enter a new password.");
        nogo = true;
    }

    if(len>20){
        printf("Your password is too long. Please re-enter a new password.");
        nogo = true;
    }

    else{
        for (int i = 0, len = strlen(pass); i < len; i++){
            if(isalpha(pass[i]) == true){
                alpha = true;
            }
        }
        for (int x = 0, len = strlen(pass); x < len; i++){
            if(isdigit(pass[x]) == true){
                digit = true;
            }
        }
    }

if(alpha == true && digit ==true ){
    printf("Your password is good.");
    nogo = false;
    return 0;
}
}

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

Password checker 1.1
Please enter a password you would like to test.
asdasdada
dsadsadadasdaewqkjlks
6
Your password is too short. Please re-enter a new password.

"asdasdada dsadsadadasdaewqkjlks "----> они - мои входные данные, а '6' после моих входных данных - мои strlen.

Могу я спросить, в чем проблема с моим кодом? Это был мой первый раз, когда я использовал bool, поэтому могу я спросить, правильно ли я использовал код?

1 Ответ

0 голосов
/ 01 мая 2018

Используйте len = strlen(pass); после scanf("%s\n", pass);, а не scanf("%s\n", pass); это scanf("%s", pass);. Вы допустили ошибку во втором цикле for и для (int x = 0, len = strlen(pass); x < len; i++) оно должно быть x ++ , а не i ++ .

Попробуйте этот код: -

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <ctype.h>

int main()
{
    bool alpha = false;
    bool digit = false;
    bool nogo = true;
    char pass[99];
    int len;
    int i, x;

    while (nogo)
    {

        printf("Password checker 1.1\n");

        printf("Please enter a password you would like to test.\n");
        scanf("%s", pass);
        len = strlen(pass);
        printf("%d\n", len);

        if (len < 8)
        {
            printf("Your password is too short. Please re-enter a new password.");
            nogo = true;
        }

        if (len > 20)
        {
            printf("Your password is too long. Please re-enter a new password.");
            nogo = true;
        }

        else
        {
            for (int i = 0; i < len; i++)
            {
                if (isalpha(pass[i])) // not needed if(isalpha(pass[i]) == true) 
                {
                    alpha = true;
                }
            }
            for (int x = 0; x < len; x++)
            {
                if (isdigit(pass[x]))// not needed if(isdigit(pass[x]) == true)
                {
                    digit = true;
                }
            }
            if (alpha == true && digit == true)
            {
                printf("Your password is good.");
                nogo = false;
            }
        }
    }
    return 0; // return 0 position was wrong.
}
...