C++ 密码验证器

C++ 密码验证器,c++,passwords,c-strings,C++,Passwords,C Strings,因此,我尝试了许多不同的方法来编写这段代码,但无法让它运行超过第一个if语句,也无法打印出每一个问题。我的问题是,不使用函数就可以这样做吗?如果是这样的话,请你帮我修复代码,使其正常工作,或者至少引导我朝着正确的方向前进。我觉得这段代码缺少了一两个关键部分,我无法集中精力 **********更新版本******************************* (还是不行) #包括“stdafx.h” #包括 #包括 #包括 #包括 使用名称空间std; //创建用于验证密码是否符合某些条件的

因此,我尝试了许多不同的方法来编写这段代码,但无法让它运行超过第一个if语句,也无法打印出每一个问题。我的问题是,不使用函数就可以这样做吗?如果是这样的话,请你帮我修复代码,使其正常工作,或者至少引导我朝着正确的方向前进。我觉得这段代码缺少了一两个关键部分,我无法集中精力

**********更新版本*******************************

(还是不行)

#包括“stdafx.h”
#包括
#包括
#包括
#包括
使用名称空间std;
//创建用于验证密码是否符合某些条件的程序
//密码必须:
//-长度至少为八个字符
//-包含大写字母
//-包含小写字母
//-包含一个数字
//提示用户输入密码,然后进行验证。您的程序应
//列出密码的每个问题。
int main()
{

cout没有函数就无法编写程序,因为
main
是一个函数,您正在使用一个函数从用户处获取输入

也就是说,是的,您可以检查文本字符串,而无需使用搜索函数

const unsigned int password_length = 8U;
unsigned int length = 0;
bool has_lower_case_letter = false;
bool has_digit = false;
bool has_upper_case_letter = false;
char password[password_length + 1];
while (length < password_length)
{
  char c;
  cin >> c;
  if (!has_lower_case_letter)
  {
    static const char lower_case_letters[] = "abcdefghijklmnopqrstuvwxyz"
    static const letter_quantity =
        sizeof(lower_case_letters) / sizeof(lower_case_letters[0]);
    for (unsigned int i = 0; i < letter_quantity; ++i)
    {
       if (c == lower_case_letters[i])
       {
          has_lower_case_letter = true;
          break;
       }
    }
  }
  //...
  password[length] = c;
  ++length;
}
const unsigned int password_length=8U;
无符号整数长度=0;
bool有小写字母=false;
bool的数字=false;
bool的大写字母=false;
字符密码[密码长度+1];
while(长度<密码长度)
{
字符c;
cin>>c;
如果(!有小写字母)
{
静态常量字符小写字母[]=“abcdefghijklmnopqrstuvwxyz”
静态常数字母数量=
sizeof(小写字母)/sizeof(小写字母[0]);
for(无符号整数i=0;i<字母数量;++i)
{
if(c==小写字母[i])
{
小写字母=true;
打破
}
}
}
//...
密码[长度]=c;
++长度;
}

检查大写字母和数字作为海报的练习。

主题外:“您的密码必须是字符长且包含:缺少多少个字符长,并且包含了一个额外的t。我很困惑。为什么要对
密码
使用
std::string
,而对
pass1
pass2
都使用字符数组?
cin
将根据用户键入的字符数填充数组(加上讨厌的终止nul字符)。尝试键入10个字符,看看会发生什么。请阅读有关
isupper
islower
isdigit
函数的文档。请注意,
while
循环不会重新请求输入。一旦进入,您就会被卡住。您的
isupper
islower
isdigit
正在检查插槽in终止nul后的数组。他们没有搜索整个字符数组。另外,当循环中的
pass1
pass2
没有变化时,为什么要使用
while
语句?谢谢!我真的很感谢你帮我解决这个问题。尽管我确实有一个问题。对于密码长度=8U,为什么我8后面有一个U吗?'U'将有符号整数8转换为无符号整数。这允许常数与类型匹配。我让它工作了一秒钟,然后它就停止了对我的工作,我不知道为什么。如果
语句中的等式使用
==
,而不是
=/code>。一个
=
用于赋值ent,两个用于比较。现在无论输入什么,它都将打印所有3个底部语句
const unsigned int password_length = 8U;
unsigned int length = 0;
bool has_lower_case_letter = false;
bool has_digit = false;
bool has_upper_case_letter = false;
char password[password_length + 1];
while (length < password_length)
{
  char c;
  cin >> c;
  if (!has_lower_case_letter)
  {
    static const char lower_case_letters[] = "abcdefghijklmnopqrstuvwxyz"
    static const letter_quantity =
        sizeof(lower_case_letters) / sizeof(lower_case_letters[0]);
    for (unsigned int i = 0; i < letter_quantity; ++i)
    {
       if (c == lower_case_letters[i])
       {
          has_lower_case_letter = true;
          break;
       }
    }
  }
  //...
  password[length] = c;
  ++length;
}