我在C语言代码中有一个循环:
i = 0;
while(!isdigit(password[i]) && password[i++] != '\0');
密码是全局声明的:
char password[33];
i
是一个整数。
我想检查用户输入的密码是否至少有一个号码。
如果我更换了' \ 0'与任何其他角色一起使用,例如,如果f出现在角色阵列的中间,则可以正常工作,
例如:
1.如果符合以下条件,则有效:
password = bblahblah9**pa**
2.如果符合以下条件,则无法正常工作:
password = blahblah9**p**
我猜,它不是正确扫描字符串的结尾,因为空字符总是在它的结尾,我不知道,跳过或者什么。
答案 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");
}