为什么我的密码检查代码无法正常工作?无论输入是什么

时间:2015-06-27 09:06:10

标签: c string if-statement nested-if

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

  • 应该至少

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

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

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

如何解决这个问题?

输出:

enter image description here

3 个答案:

答案 0 :(得分:6)

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

因此,当遇到'\0'字符时,您必须退出循环。

答案 1 :(得分:4)

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

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

改变这个:

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

对此:

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

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

因此,每个不是数字的字符都被计为misc。

改变这个:

if (isdigit(x[i]))

对此:

else if (isdigit(x[i]))

答案 2 :(得分:4)

其他答案提到了主要问题。还有一个问题:else之前缺少if (isdigit(x[i])) {num++;}

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++;}
}