2015-09-27 50 views
-2

沒有結束我有一個C語言代碼的循環:雖然在循環空字符

i = 0; 

while(!isdigit(password[i]) && password[i++] != '\0'); 

密碼是全局聲明如下:

char password[33]; 

i是一個整數。

我想檢查用戶輸入的密碼是否至少有一個數字。

如果我換成「\ 0」與其他任何字符,比如說,「P」,它的工作原理當且僅當p出現在字符數組的中間,

例如:

1.It工作,如果:

password = bblahblah9**pa** 

如果2.It不起作用:

password = blahblah9**p** 

我想,它不是掃描年代末因爲空字符總是在最後它正在,我不知道,跳過或什麼。

!isdigit(password[i]) && password[i++] != '\0' 

如果isdigit(password[i])回報true&&運營商的右側未評估:

+0

你如何存儲在'password'字符串? – Rohan

+0

scanf(「%s」,密碼); –

+4

您應該將'isdigit(password [i])'更改爲'isdigit((unsigned char)password [i])',因爲'isdigit'不處理負輸入,'char'可以是有符號類型。 – melpomene

回答

4

指數i一旦你找到一個數字不會增加。

+0

我試圖改變這樣的事情,像這樣 –

+5

while(!isdigit(password [i])&& password [i]!='\ 0')i ++; –

+0

@AkshayAnurag是的,你可以去那裏。請注意什麼melpomene先生在評論 – ameyCU

0

試試這個

#include <usual.h> 

int checknoint(char *pass) 
{ 
int i = 0; 

for(i = 0; pass[i] != '\0'; i++) 
{ 
if (isdigit(pass[i])) 
    return (1); 
} 
return (0); 
} 

int main() 
{ 
char password[50]; 

//strcpy(password , "atestwith no number"); 
strcpy(password , "atestwith a9 number"); 

if(!checknoint(password)) printf("\n ok"); 
else printf("\n NOT ok"); 

} 
+0

您的循環邏輯有缺陷:始終跳過初始字符。爲什麼不使用標準的C語言:'for(int i = 0; pass [i]!='\ 0'; i ++){...}' – chqrlie

+0

格式也是非常糟糕的 –