2016-05-08 6 views
-1

Итак, моя проблема заключается в том, что я не могу найти или подумать о чем-нибудь, что войдет в аргумент while, который проверит все три функции, чтобы убедиться, что каждый из них ложный, пожалуйста, помогите! Это моя проблема!Как я могу проверить логическую переменную в main, поэтому цикл do-while проходит через три функции?

class Validate 
{ 
public: 
    Validate(string); 
    Validate(); 
    bool checkLength(); 
    bool checkSpaces(); 
    bool checkUpper(); 
    //bool checkUpper(char); 
private: 
    string password; 
    static const int LEN = 5; 

}; 
Validate::Validate() 
{ 

} 
Validate::Validate(string pass) 
{ 
    pass = password; 

} 
bool Validate:: checkLength() 
{ 
     if (password.length() < LEN) 
     { 
      cout << "Password is not 5 characters." << " please try again..." << endl; 
      return true; 
     } 
     else 
      return false; 

} 
bool Validate::checkSpaces() 
{ 
    if (password.find(' ') != string::npos) 
    { 
     cout << "Password can not have any spaces " << endl; 
     return true; 
    } 
    else 
     return false; 
} 
bool Validate::checkUpper() 
{ 

    for (int i = 0; i < password.length(); i++) 
    { 
     if (!isupper(password[i])) 
     { 
      cout << "Password must have at least one uppercase" << endl; 
      return true; 
     } 
     else 
      return false; 
    } 



} 

Основной файл

//DISPLAY 8.9 Using a Vector 
#include <iostream> 
#include <vector> 
#include <string> 
using namespace std; 
#include "c:\Users\barta\OneDrive\Documents\Visual Studio 2015\Projects\Project 7\Project 7\Validate.h" 

int main() 
{ 

    vector<string> data; 
    string firstName, lastName, login, userName, password; 
    Validate c; 
    bool check; 
    firstName = "1"; 

    cout << "Enter your first name.\n"; 
    getline(cin, firstName); 
    while (firstName != "0") 
    { 

     cout << "Enter your last name.\n"; 
     getline(cin, lastName); 
     do 
     { 

      cout << "Enter a password.\n"; 
      getline(cin, password); 
      //password = c.checkLength(); 
      //password = c.checkSpaces(); 
      c.checkUpper(); 

     } while (false); 

     lastName = lastName.substr(0, 5); 

     userName = firstName.at(0) + lastName; 
     login = userName + ", " + password; 
     data.push_back(login); 

     cout << "Enter your first name.\n"; 
     getline(cin, firstName); 
    } 

    cout << " Login data entered \n" << endl; 

     for (unsigned int i = 0; i < data.size(); i++) 
     { 
      cout << " " << data.at(i) << endl; 
     } 



    system("pause"); 
    return 0; 
} 

ответ

0

Ваш вопрос немного неясно, но я думаю, что вы ищете:

bool flag; 

do 
{ 
     // All your existing code is here... 

     Validate c{password}; 

     flag = c.checkLength() || c.checkSpaces() || c.checkUpper(); 

} while (flag); 

конструктор вашего Validate класса принимает пароль в качестве параметра, так вы должны построить объект после чтения пароля, а не в начале main().

+0

Я пробовал это, и петля думает, что пароль неверен –

+0

Используйте отладчик, чтобы выполнить свой код. Я вижу хотя бы одну ошибку в вашем методе checkUpper(). –

+0

Да, отладчик говорит \t «Validate :: checkUpper»: не все пути управления возвращают значение « –