【发布时间】:2016-08-12 10:42:57
【问题描述】:
我想构建一个简单的程序来检查用户输入的密码是否包含至少一个大写字母、一个数字和一个符号。然后如果真打印“这是一个强密码”。 但是,当我开始测试它时,如果我输入像 SS2 这样的 pass,它会被视为强密码...
int issymbol(int password) {
if (password >= 33 && password <= 47) return 1;
else if (password >= 58 && password <= 64) return 1;
else if (password >= 91 && password <= 96) return 1;
else if (password >= 123 && password <= 126) return 1;
else return 0;
}
int main()
{
char password[7];
int i;
int u, d, s; // u - uppercase character
// d - digit
u = d = s = 0; // s - symbol
scanf("%s", password);
for(i = 0; i < 7; i++) {
if ( isupper(password[i]) && (u == 0) )
u++;
if ( isdigit(password[i]) && (d == 0) )
d++;
if ( issymbol(password[i]) && (s == 0) ) // Checks if password[i] is a symbol
s++;
if ( (u + d + s) >= 3) {
printf("Your password is strong!\n");
break;
}
}
if ( (u + d + s) < 3) printf("Your password is weak:(\n");
return 0;
}
欢迎任何改进它的想法。
【问题讨论】:
-
又是一个了解调试器是多么出色的工具的绝佳机会。
-
结束循环条件错误,它必须取决于密码长度。
-
scanf("%s", password);-->scanf("%6s", password); -
当您输入
SS2时,它的得分为 3,然后中断。如果你不喜欢这样,那就改变你的逻辑。 -
是的,通过使用@Bathsheba 逻辑它可以工作。
标签: c