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

Why is my password checking code not working correctly? It gives same output regardless of whatsoever input

我制作了一个密码检查程序,用于检查以下条件:-

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

例如:- Pratik10pratik10pratiktenpr@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;
}

如何更正此问题?

输出:

您应该只检查用户输入的以 null 结尾的字符串。

换句话说,您应该迭代 x 直到遇到空字符。


改变这个:

for (i = 0; i < 100; i++)

为此:

for (i = 0; x[i] != 0; i++)

第二个问题是您没有正确使用 if/else

因此,每个不是数字的字符都被算作杂项。


改变这个:

if (isdigit(x[i]))

为此:

else if (isdigit(x[i]))

问题是您正在检查整个数组,其中大部分是未初始化的并且随机包含各种字符。

所以遇到'[=10=]'个字符就得退出循环

其他回答都提到了主要问题。还有一个问题:if (isdigit(x[i])) {num++;}

前少了一个else
for(i=0; x[i]!=0; i++)
{
   if (isalpha(x[i]))
   {
      if (isupper(x[i])) {uc++;}
      if (islower(x[i])) {lc++;}
   }
   else if (isdigit(x[i])) {num++;} // a missing else
   else {misc++;}
}