我正在尝试练习,我让用户写了一个传球,我必须检查传球长度(必须至少6个字符),大写,小写和至少1个数字。出于某种原因,当我尝试使其工作时,它不会检测到大写和小写。即使“lower”或“upper”= = true,它仍会进入嵌套的if(!lower)或if(!upper)条件,并在另一个为false时运行该代码块。
谁能告诉我逻辑错在哪里?我不明白为什么如果将bool变量设置为true,它甚至会使用if来访问if。
bool verified(const char *pass)
{
int length = strlen(pass);
bool lower, upper, number;
lower = hasLower(pass);
upper = hasUpper(pass);
number = hasNumber(pass);
if (length < 6)
{
cout << "INVALID: Your pass does not contain enough characters";
return false;
}
else
{
if (lower && upper && number)
{
cout << "Your pass is valid and verified. Congrats!";
return true;
}
if (!lower)
{
if (!number)
{
cout << "INVALID: Your pass does not contain lower case letters or at least 1 number";
return false;
}
if (!upper);
{
cout << "INVALID: Your pass does not contain lower case or upper case letters";
return false;
}
cout << "INVALID: Your pass does not contain lower case letters";
return false;
}
if (!upper);
{
if (!number)
{
cout << "INVALID: Your pass does not contain upper case letters or at least 1 number";
return false;
}
if (!lower);
{
cout << "INVALID: Your pass does not contain upper case or lower case letters"1;
return false;
}
cout << "INVALID: Your pass does not contain upper case letters";
return false;
}
if (!number)
{
cout << "INVALID: Your pass does not contain at least 1 number";
return false;
}
}
}
检查大写的方法
bool hasUpper(const char *pass)
{
bool upper;
for (int i = 0; i < strlen(pass); i++)
{
upper = isupper(pass[i]);
if (upper == true)
{
return true;
break;
}
}
return false;
}
检查小写的方法
bool hasLower(const char *pass)
{
bool lower;
for (int i = 0; i < strlen(pass); i++)
{
lower = islower(pass[i]);
if (lower == true)
{
return true;
break;
}
}
return false;
}
检查号码的方法
bool hasNumber(string pass)
{
if (pass.find('0') != string::npos ||
pass.find('1') != string::npos ||
pass.find('2') != string::npos ||
pass.find('3') != string::npos ||
pass.find('4') != string::npos ||
pass.find('5') != string::npos ||
pass.find('6') != string::npos ||
pass.find('7') != string::npos ||
pass.find('8') != string::npos ||
pass.find('9') != string::npos)
return true;
else
return false;
}
答案 0 :(得分:1)
你写过:
if (!upper) *;*
你看到;
之后?
事实上,您已在代码中的多个位置完成此操作。