2014-11-26 4 views
-1

현재 암호가 유효한지 확인하기 위해 프로그램을 작성 중입니다. 암호는 7 자 여야하며 대문자 및 소문자 여야합니다. 현재 코드가 첫 번째 체크 길이에 도달 할 수 있지만 디버그 어설 션 오류가 발생했습니다. 나는 초기 문자열을 고쳐야한다고 확신하지만 확신 할 수 없다. 어떤 도움이라도 대단히 감사하겠습니다.디버그 어설 션 암호 확인 실패

// 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 (password);'이것은 당신의 함수'checkCharacterTwo'를 호출하지 않습니다. 이것은'checkCharacterTwo'라는 새로운 문자열 변수를 생성합니다. 이것은'password 변수. – 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