【发布时间】:2018-10-11 17:06:51
【问题描述】:
我一直在尝试使用以下代码创建密码检查器。
bool alpha = false;
bool digit = false;
bool nogo = true;
char pass[99];
int len;
len = strlen(pass);
int i, x;
while(nogo){
printf("Password checker 1.1\n");
printf("Please enter a password you would like to test.\n");
scanf("%s\n", pass);
printf("%d\n", len);
if(len<8){
printf("Your password is too short. Please re-enter a new password.");
nogo = true;
}
if(len>20){
printf("Your password is too long. Please re-enter a new password.");
nogo = true;
}
else{
for (int i = 0, len = strlen(pass); i < len; i++){
if(isalpha(pass[i]) == true){
alpha = true;
}
}
for (int x = 0, len = strlen(pass); x < len; i++){
if(isdigit(pass[x]) == true){
digit = true;
}
}
}
if(alpha == true && digit ==true ){
printf("Your password is good.");
nogo = false;
return 0;
}
}
一切都没有错误地构建。但是,第一次输入密码之后的代码似乎没有正常运行。我必须输入两次它提示输入另一个密码。此外,它拒绝接受用户的第二个输入。以下是我的控制台上显示的内容。
Password checker 1.1
Please enter a password you would like to test.
asdasdada
dsadsadadasdaewqkjlks
6
Your password is too short. Please re-enter a new password.
"asdasdada dsadsadadasdaewqkjlks" ---->它们是我的输入,我输入后面的 '6' 应该是我的 strlen。
请问我的代码有什么问题?这是我第一次使用 bool,请问我使用的代码是否正确?
【问题讨论】:
-
len = strlen(pass);这是未定义的行为,你的pass当时没有初始化。 -
同样在您的第二个
for循环中,您将再次增加i,并且可能意味着增加x。在两个循环中,您都使用内联声明形式,因此您应该删除函数顶部的int i, x声明(或从两个for循环中删除int声明)。 -
感谢@user3121023!它解决了在显示
strlen之前必须第二次输入密码的问题。它还正确显示了我的strlen。我仍然无法重新输入新密码进行测试。 -
@TypeIA 不错!我现在可以重新输入密码进行测试,它给我留下了正确的 strlen。但是,它似乎并没有运行这段代码。
if(alpha == true && digit ==true ){ printf("Your password is good."); nogo = false; return 0;
标签: c loops for-loop if-statement boolean