用C实现密码检查器

pxiryf3j  于 2023-03-17  发布在  其他
关注(0)|答案(3)|浏览(119)
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main()
{
    char pass[99];
    int i, x;
    
    while(1)
    {
        printf("Enter a password:");
        scanf("%s", pass);
        
        // Check if first character is uppercase
        if (!isupper(pass[0]))
        {
            printf("Password Invalid!\n");
            continue;
        }
        
        x = 0;
        
        // Check each character in the password
        for (i = 0; i < strlen(pass); i++)
        {
            // If the character is not a digit or a valid special character, password is invalid
            if (!isdigit(pass[i]) && pass[i] != '?' && pass[i] != '_' && pass[i] != '$' && pass[i] != '!')
            {
                printf("Password Invalid!\n");
                x = 0;
                break;
            }
            x++;
        }
        
        // If the password length is less than 8 characters, password is invalid
        if (x < 8)
        {
            printf("Password Invalid!\n");
            continue;
        }
        
        // If password passes all checks, password is valid
        printf("Password Valid\n");
        break;
    }
    
    return 0;
}

代码应检查长度是否大于8,首字母是否为大写,是否包含数字或特殊字符。代码给出的密码对于有效组合无效...................................................

6vl6ewon

6vl6ewon1#

看起来你在你的性格测试中忽略了字母字符的允许。我相信下面的代码行:

if (!isdigit(pass[i]) && pass[i] != '?' && pass[i] != '_' && pass[i] != '$' && pass[i] != '!')

需要更改为:

if (!isalpha(pass[i]) && !isdigit(pass[i]) && pass[i] != '?' && pass[i] != '_' && pass[i] != '$' && pass[i] != '!')

以提供您所需的功能。
给予一下,看看它是否符合你项目的精神。

sirbozc5

sirbozc52#

另一个测试选项可以是这样的:

if (!((pass[i] >= '0') && (pass[i] <= '9')) &&
    !((pass[i] >= 'a') && (pass[i] <= 'z')) &&
    !((pass[i] >= 'A') && (pass[i] <= 'Z')) &&
    pass[i] != '?' && pass[i] != '_' && pass[i] != '$' && pass[i] != '!')
vu8f3i0k

vu8f3i0k3#

if (!isupper(pass[0]))中的条件逻辑有问题,您使用了!逻辑运算符,它会反转条件逻辑,因此要使其正常工作,请改用if (isupper(pass[0]))

相关问题