2014-11-26 3 views
-1

В настоящее время я кодирую программу, которая проверяет пароль, чтобы узнать, действительно ли он. Пароль должен быть 7 символов и иметь прописную и строчную буквы. Мой текущий код может достигать первой длины проверки - но затем имеет отказ от отчета об отладке. Я считаю, что мне нужно исправить исходные строки, но я не уверен. Любая помощь будет принята с благодарностью.Debug Assertion Не удалось проверить пароль

// Lab 9 
// coded by Elijah 

#include <iostream> 
#include <string> 
#include <iomanip> 
#include <cctype> 
#include <cstring> 
using namespace std; 

string checkCharacter(string); 
string checkCharacterTwo(string); 

int main() 
{ 
    string capitalAnswer = "O", capitalAnswerTwo = "O"; 
    std::string password; 

    cout << "Please enter a password: "; 
    cin >> password; 

    if (password.length() >= 7) 
    { 
     capitalAnswer = checkCharacter(password); 

     if (capitalAnswer == "y") 
     { 
      string checkCharacterTwo(password); 

      if (capitalAnswerTwo == "y") 
      { 
       cout << "Thank you, that is a valid password" << endl; 
       return 0; 
      } 
      else 
      { 
       cout << "Passwords must contain at least one lowercase letter" << endl; 
       main(); 
      } 
     } 
     else 
     { 
      cout << "Passwords must include at least one uppercase letter" << endl; 
      main(); 
     } 
    } 
    else 
    { 
     cout << "Passwords must be at least 7 characters long" << endl; 
     main(); 
    } 
} 

string checkCharacter(string password) 
{ 
    string answer; 
    string character; 
    string capitalAnswer; 
    int number; 
    for (number = 0; number > password.length() || answer != "y"; number++) 
     { 
      character = password[number]; 

      if (character >= "A" && character <= "Z") 
       answer = "y"; 
      else 
       answer = "n"; 
     } 

     { 
      if (answer == "y") 
       capitalAnswer = "y"; 
      else 
       capitalAnswer = "n"; 
     } 

     return capitalAnswer; 
} 

string checkCharacterTwo(string password) 
{ 
    string answer; 
    string character; 
    string capitalAnswerTwo; 
    for (int number = 0; number > password.length() || answer != "y"; number++) 
    { 
     character = password[number]; 

     if (character >= "a" && character <= "z") 
      answer = "y"; 
     else 
      answer = "n"; 
    } 

    if (answer == "y") 
     capitalAnswerTwo = "y"; 
    else 
     capitalAnswerTwo = "n"; 

    return capitalAnswerTwo; 
} 
+4

Не вызывайте main() когда-либо. http://stackoverflow.com/a/2128727/487892 – drescherjm

+1

'string checkCharacterTwo (пароль);' это не вызывает вашу функцию 'checkCharacterTwo', это создает новую строковую переменную с именем' checkCharacterTwo', которая является точной копией пароля 'переменная. – Borgleader

+0

Я просто хочу повторить, что это действительно плохая идея назвать main. Также не нравится, как вам нужно включить '', поэтому не включайте его. – shuttle87

ответ

0

Оказывается, что ваше состояние зацикливания в checkCharacter() неправильно и заставляет вас выйти за пределы. Исправьте это как foolows:

for (number = 0; number < password.length() && answer != "y"; number++) 

Та же проблема возникает в checkCharacterTwo(), что должно стать:

for (int number = 0; number < password.length() && answer != "y"; number++) 

Наконец, вы не установите значение capitalAnswerTwo. Вы должны заменить:

string checkCharacterTwo(password); 

с:

capitalAnswerTwo = checkCharacterTwo(password); 

Тогда все в порядке!

+0

Большое вам спасибо! Это сработало отлично. – Elijah

Смежные вопросы