2015-09-27 51 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

格式也是非常糟糕的 –