2016-08-13 48 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"); 

} 

希望這將幫助... :)