2015-10-29 147 views
-3

任何人都知道這個問題?它只檢測第一個字符。我不知道這個問題,請幫忙。我找不到答案。多個if語句C 446

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

int main() 
{ 
    int password; 

    printf("Enter your password. \n"); 
    printf("Password must contain an uppercase letter, a lowercase letter, and a   number. \n"); 
    scanf("%c", &password); 

    if(isupper(password)){ 
     printf("Password meets requirement 1. \n"); 
    } 
    if(islower(password)){ 
     printf("Password meets requirement 2. \n"); 
    } 
    if(isdigit(password)){ 
     printf("Password meets requirement 3. \n"); 
    } 

    return 0; 
} 
+0

引擎收錄在這裏:http://pastebin.com/ZdDHgpx8 – pushcode

+0

'isupper','islower'和'isdigit'對單個字符,而不是字符串操作。 – keithmo

+0

您正在將單個字符讀入一個應該是密碼的int變量。這不是你如何使用scanf,整數變量或密碼。 – Magisch

回答

0

您只讀取單個字符,然後使用函數來測試此單個字符。讀入字符緩衝區(例如char password[128]使用fgets(password, 128, stdin)),然後遍歷您的密碼並測試各個的字符。

1

可變password是一個單一的實體,它只能存儲一個字符。你也讀取單個字符。 This scanf (and family) reference可能會有所幫助。

如果要讀取多個字符,則需要使用"%s"格式,而且還需要數組的字符。像

char password[32]; 
scanf("%31s", password); 

"%31s"的格式告訴scanf讀取至多31個字符,並存儲爲一個零終止的字符串(因此僅至多31個字符讀取32個字符的數組來存儲)。


那麼對於其他代碼,你需要使用循環遍歷字符串。在這裏,你有兩個選擇,當談到知道字符串的結尾:要麼使用strlen得到字符串的長度,或依賴於一個事實,即在C字符串由零(字符'\0')終止。

0

您使用了一個int,並存儲它進入的第一個字符的ASCII值。相反,您應該使用字符數組(char [])或字符指針(char *)併爲其分配內存,然後在scanf中使用%s(而不是%c)捕獲輸入的密碼。