我一直在解決這個問題無數小時,我找不到問題所在。我改變並測試了問題的每個部分,並總是得到奇怪和錯誤的結果。我開始認爲,也許我的編譯器出現故障。從C++開始,密碼驗證程序
這就是我想要做的: 開發一個程序,提示輸入密碼,程序檢查是否滿足以下條件。
最少6個字符長。
至少包含一個大寫字母。
至少包含一個小寫字母。
包含至少一個數字。
如果輸入的密碼不符合標準,則程序應顯示原因並提示重新輸入。如果密碼是好的,它會顯示一條消息並結束程序。請幫忙!
注意:這是一個控制檯32程序。
#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <cctype>
#include "ctype.h"
using namespace std;
// Function prototype
bool lengthTest(char *);
bool lowCaseTest(char []);
bool upCaseTest(char []);
bool digitTest(char []);
const int SIZE = 20;
int main()
{
// Buffer to hold the string.
char password[SIZE];
int sumofbool;
// Program Intro Display
cout << "----PASSWORD VERIFIER PROGRAM----\n\n";
cout << "Enter a password that meets the following criteria:\n"
<< "-Minimum of 6 characters in length.\n"
<< "-Contains at least one uppercase and one lowercase letter.\n"
<< "-Contains at least one digit.\n\n";
cout << "->";
// Get input from user.
cin.getline(password, SIZE);
sumofbool = lengthTest(password) + lowCaseTest(password) + upCaseTest(password)
+ digitTest(password);
// if 1 or more of the 4 functions is not true, display why and prompt for re-entry.
while (sumofbool < 4)
{
if (!lengthTest(password))
cout << "Error, password must be at least 6 characters long.\n";
if (!upCaseTest(password))
cout << "Error, password must contain at least one upper case letter.\n";
if (!lowCaseTest(password))
cout << "Error, password must contain at least one lower case letter.\n";
if (!digitTest(password))
cout << "Error, password must contain at least one digit.\n";
cout << "Please re-enter password: ";
// prompt for re-entry and call functions to test input.
cin.getline(password, SIZE);
sumofbool = lengthTest(password) + lowCaseTest(password) + upCaseTest(password);
+ digitTest(password);
}
// if conditions for password are met, display message.
cout << "\nYou entered a valid password.\n\n";
return 0;
}
//*********LENGTH TEST FUNCTION***********
bool lengthTest(char *str)
{
int numChar = 0;
bool validlength = false;
for (int cnt = 0; cnt < SIZE; cnt++)
{
while (*str != 0)
str++, numChar++;
}
if (numChar >= 6)
validlength = true;
return validlength;
}
//*********LOWERCASE LETTER TEST FUNCTION*********
bool lowCaseTest(char pass[])
{
for (int cnt = 0; cnt < SIZE; cnt++)
{
if (islower(pass[cnt]))
return true;
}
return false;
}
//********CAPITAL LETTER TEST FUNCTION*********
bool upCaseTest(char pass[])
{
for (int cnt = 0; cnt < 20; cnt++)
{
if (isupper(pass[cnt]))
return true;
}
return false;
}
//**********DIGIT TEST FUNCTION************
bool digitTest(char pass[])
{
for (int cnt = 0; cnt < 20; cnt++)
{
if (isdigit(pass[cnt]))
return true;
}
return false;
}
*我開始想,也許我的編譯器出現故障*幾乎總是表明您有故障,現在是時候散步或睡一覺了。 – Duck
給出它失敗的例子。這將很容易反向工程。 – Mahesh
我有一種感覺,它有一些事實,即程序正在測試傳入的每個字符串中的SIZE字符,但不保證該字符串是SIZE字符長。這應該真的停止測試一旦達到NULL字符,否則我會想象你應該期待未定義的行爲。 – BenTrofatter