循环时不以null字符结尾

时间:2015-09-27 09:50:31

标签: c

我在C语言代码中有一个循环:

i = 0;

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

密码是全局声明的:

char password[33];

i是一个整数。

我想检查用户输入的密码是否至少有一个号码。

如果我更换了' \ 0'与任何其他角色一起使用,例如,如果f出现在角色阵列的中间,则可以正常工作,

例如:

1.如果符合以下条件,则有效:

password = bblahblah9**pa**

2.如果符合以下条件,则无法正常工作:

password = blahblah9**p**

我猜,它不是正确扫描字符串的结尾,因为空字符总是在它的结尾,我不知道,跳过或者什么。

2 个答案:

答案 0 :(得分:4)

找到数字后,索引i不会递增:

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

如果isdigit(password[i])返回true,则&&运算符的右侧不会被评估。

答案 1 :(得分: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");

}