2016-08-13 50 views
-2

密码需要一个字母和一个数字。下面的代码:C中的密码强度检测器不起作用

#include <ctype.h> 
int main() 
{ 
    char password; 

    printf("Please enter a password.\n"); 
    scanf("%c", &password); 

    if ((isalpha (password) && isdigit(password))){ 
     printf("Your password is strong!\n"); 
    } else { 
    printf("Your password is weak!"); 
    } 
    return 0; 
} 

然而,当我编译它,它总是打印“您的密码是弱”,甚至当我在这两个字符和数字输入。怎么了?

+0

到底是什么问题?正如@JonathonReinhart的回答所指出的,对于一个字符,测试总是会失败 - 它不能同时是字母和数字。更准确地说明你想用英文而不是C来达到目的。 –

+0

你的应用程序只需输入第一个字符('scanf(“%c”')并检查该字符是否为'isalpha()'AND'isdigit() '我想你想要修改你的应用程序来读取输入的整个密码并检查,如果至少有一个字母和一个数字。 – RhinoDevel

+0

请看[怎么问](http://stackoverflow.com/help/how这就像是一个调试家庭作业的请求。 – zhon

回答

4

你只是读取来自用户的单个字符:

char password; 

printf("Please enter a password.\n"); 
scanf("%c", &password); 

由于是单个字符不能既是一个数字一个字母,第一个条件总是失败。

您需要从用户那里读取整个字符串。然后,使用循环遍历字符串中的每个字符来检查您需要的各种类型字符的存在。 ctype.h的函数采用单个字符,而不是字符串 - 如果您尝试将字符数组或指针传递给它们,它将无法编译。

1

函数isalphaisdigit对单个字符而不是char数组进行操作。

1

%c只能读取单个字符。 %s用于读取字符串。您需要将密码更改为数组并读取字符串。您可以拆分数组中的每个字符并查看数组是否包含字符和数字。

0

你的代码并不完美,以获得密码的强度。您需要定义更多密码特征。我已经开发出了您需要满足某些条件的代码。它们是:

  • 密码应该是最小长度为8位数。
  • 它应该至少包含一个大写字母和一个小写字母。

的代码如下:

#include<stdio.h> 
#include<ctype.h> 
int main() 
{ 
char arr[15];int count=0,i;int lower=0,upper=0;int ck=0; 
gets(arr); 

for(i=0;arr[i]!='\0';i++){ 
    count++; 
} 

for(i=0;arr[i]!='\0';i++){ 
     if(isupper(arr[i])){ 
      upper++; 
     } 
} 

for(i=0;arr[i]!='\0';i++){ 
     if(islower(arr[i])){ 
      lower++; 
     } 

} 
for(i=0;arr[i]!='\0';i++){ 
     if(isspace(arr[i])){ 
      ck=0; 
      break; 
     } 

} 

if(count>=8&&upper>=1&&lower>=1){ 

     ck=1; 
} 
else{ 
    ck=0; 
} 


if(ck==1) 
    printf("strong password"); 
else if(ck==0) 
    printf("weak password"); 

} 

希望这将帮助... :)