为什么我的密码检查代码无法正常工作?无论输入如何,它都会提供相同的输出

Cod*_*Man 1 c string if-statement nested-if

我做了一个密码检查程序,检查以下标准: -

  • 至少应该有

    • 1个大写
    • 1个小写字母
    • 1个特殊字符
    • 1个号码
  • 应小于100个字符

就是这样.我没有给出任何下限.无论我给出什么输入(正确或不正确),程序都会给我与截图中附带的相同或类似的输出.

对于如: - ,Pratik10,pratik10,pratikten,pr@tiK10我得到的结果相同"Password is fine and valid".

为什么我的程序没有正确检查定义的条件?它甚至没有正确打印密码的计数器.

以下是我的代码:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <string.h>

int main()
{
    char x[100];
    int i;
    int uc=0;
    int lc=0;
    int num=0;
    int misc=0;

    printf("enter your password\n");
    scanf("%s",x);

    for(i=0;i<100;i++) {
        if (isalpha(x[i])) {
            if (isupper(x[i])) {
                uc++;
            }
            if (islower(x[i])) {
                lc++;
            }
        }
        if (isdigit(x[i])) {
            num++;
        }
        else {  
            misc++;
        }
    }

    printf("checking your password\n");
    printf("%d uc\n",uc);
    printf("%d lc\n",lc);
    printf("%d num\n",num);
    printf("%d misc\n",misc);

    if ((uc > 0) && (lc > 0) && (num > 0) && (misc > 0)) {
        printf("password is fine and valid\n");
    }
    else {
        if(lc<=0) {
            printf("lowercase character(s) missing cannot proceed without inclusion\n");
        }
        if(uc<=0) {
            printf("uppercase character(s) missing cannot proceed without inclusion\n");
        }
        if(num<=0) {
            printf("number(s) missing cannot proceed without inclusion\n");
        }
        if(misc<=0) {
            printf("special character(s) missing cannot proceed without inclusion\n");
        }
        printf("please include all the missing parameters in combination to validate the password and try again\n\n");
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

怎么纠正这个?

输出:

在此输入图像描述

Eri*_*ler 6

问题是你正在检查整个数组,这个数组大多是未初始化的,并且随机包含所有类型的字符.

因此,您必须在遇到'\0'角色时退出循环.