C语言中的密码检查器

t3irkdon  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(171)

我想把输入作为一个字符串,并评估它是否是一个有效的密码。密码是有效的,如果它有数字,大写和小写字母,长度至少为7个字符。此外,当所有这些要求都得到满足,输出应该是“强”,否则“弱”。代码:

#include<stdio.h>
#include<string.h>
#define N 20

int main()
{
  char pass[N];
  int i, x=0, p;
  printf("Enter a password: ");
  scanf("%s", &pass);
  if(strlen(pass)>=7)
  {
     p=strlen(pass);
     for (i = 0; i < p; i++)
     {
       if ((pass[i] >= 'a' && pass[i] <= 'z') || (pass[i] >= 'A' && pass[i <= 'Z')  || (pass[i] >= '0' && pass[i] <= '9'))
          printf("Sucess! ");
     }
 }  
 else
   printf("Try Again..");
 return 0;

}
某些功能无法正常工作,例如:1.执行后,它多次打印“Sucess!!”2.在内部if块中,当我替换||使用&&,则不打印任何内容。
请帮帮我。

eqfvzcg8

eqfvzcg81#

您可以更改这段代码:

p=strlen(pass);
     for (i = 0; i < p; i++)
     {
       if ((pass[i] >= 'a' && pass[i] <= 'z') || (pass[i] >= 'A' && pass[i <= 'Z')  || (pass[i] >= '0' && pass[i] <= '9'))
          printf("Sucess! ");
     }

......变成这样:

int lower_case_count = 0;
     int upper_case_count = 0;
     int digit_count = 0;
     p=strlen(pass);
     for (i = 0; i < p; i++) {
          if (pass[i] >= 'a' && pass[i] <= 'z') ++lower_case_count;
          if (pass[i] >= 'A' && pass[i] <= 'Z') ++upper_case_count;
          if (pass[i] >= '0' && pass[i] <= '9') ++digit_count;
     }    
     if (lower_case_count > 0 && upper_case_count > 0 && digit_count > 0) {
          printf("Strong\n");
     }

在循环中,您只需要计算每种类型的字符存在的数量。
循环完成后,您可以检查是否满足所有需求并采取适当的操作。

yzuktlbb

yzuktlbb2#

你让我思考,我想出了一个相当简单的解决方案--一系列的if被 Package 在while循环中,它检查大小写、数字和特殊字符,报告用户最终犯下的确切错误。

#include <stdio.h>
#include <ctype.h>
#include <cs50.h>
#include <string.h>

int main(void)
{
    char *pass = get_string("Enter your password: ");
    int i = 0,
    lower_count = 0,
    upper_count = 0,
    digit_count = 0,
    punct_count = 0;
    while (pass[i]) {
        if(islower(pass[i]))
            lower_count++;
        if(isupper(pass[i]))
            upper_count++;
        if (isdigit(pass[i]))
            digit_count++;
        if (ispunct(pass[i]))
            punct_count++;
        i++;
        }
        if(strlen(pass) < 8)
        {
            printf("The password must have at least 8 chars\n");
            return 1;
        }
        if(lower_count == 0)
        {
             printf("You need lowercase\n");
        }
        if(upper_count == 0)
        {
             printf("You need an uppercase\n");
        }
        if(digit_count == 0)
        {
             printf("You need digits\n");
        }
        if(punct_count ==0)
        {
             printf("You need a special character\n");
        }
        if(upper_count != 0 && digit_count != 0 
        && punct_count != 0)
        {
            printf("Your password is OK\n");
        }
        return 0;
    }

当然,你可以玩得更远,添加一些代码来检查密码是否足够强大(即超过12个字符),等等。

相关问题