String Verifier char循环无法正常工作

时间:2013-07-25 17:00:09

标签: c++ string loops verification

我无法让密码验证程序正常运行。我的循环似乎只迭代一次,我只是将“它”作为输出来查看它是否经常迭代,但不是。我不知道为什么,布尔值正在工作,但它只迭代一次,如果我的第一个字母是小写,那么它会说我需要一个大写和一个数字,反之亦然如果我的第一个字符是数字或大写。这是一个家庭作业,但我有点失落。任何帮助将不胜感激。

#include<iostream>
#include<string>
#include<cctype>



using namespace std; 


int main()
{
    const int LENGTH = 20;
    char pass[LENGTH];



    cout << "Enter a password, that's at least 6 characters long, one uppercase, one lowercase letter ";
    cout << " and one digit." << endl;
    cin.getline(pass,LENGTH);



    bool isdig = true;
    bool isdown = true;
    bool isup = true;
    bool correct = false; 





    for(int index = 0; correct == false; index++)
    {
        cout << "it" << endl;

        if(isupper(pass[index]) == 0)
        {isup = false;}

        if(islower(pass[index]) == 0)
        {isdown = false;}

        if(isdigit(pass[index]) == 0)
        {isdig = false;}



        if(isdig == true && isup == true && isdown == true)
        {correct = true;}



        if(index = LENGTH - 1)
        {
            if(isdig == false)
            {cout << "Your password needs a digit." << endl;}

            if(isup == false)
            {cout << "Your password needs an uppercase letter." << endl;}

            if(isdown == false)
            {cout << "Your password needs a lowercase letter." << endl;}

            cout << "Re-enter another password. " << endl;
            cin.getline(pass,LENGTH);

            index = 0;
            isdown = true;
            isup = true;
            isdig = true;
        }

    }


    system("pause");
    return 0;

}

2 个答案:

答案 0 :(得分:1)

问题可能就在这一行:

if(index = LENGTH - 1)

在此LENGTH - 1的值分配给index,因此始终要求您重新输入密码,因为该表达式始终为真。

答案 1 :(得分:0)

您应该启用编译器警告(如果您使用的是g ++,则为-Wall)并注意警告:

es.cpp:52:30: warning: suggest parentheses around assignment used as truth value

这告诉您某些条件(a==b)可能被写为(a=b),这是一项任务。确实

if(index = LENGTH - 1)

应该写

if (index == LENGTH - 1)

同样为了便于阅读

if(isdig == true && isup == true && isdown == true)

可以替换为

if (isdig and isup and isdown)

if(isdig == false)

通过

if (not isdig)