Я пишу программу, которая позволяет пользователю вводить пользовательский пароль, а затем проверять, соответствуют ли они определенным критериям в этом случае; 1. Должно быть от 9 до 15 символов. 2. Должно быть два или более символов в верхнем и нижнем регистре. 3. Должно быть 2 или более номеров. 4. должен содержать 1 или более символов.
Моя проблема в том, что я, кажется, не сравниваю строки правильно, так как когда я запускаю ее, она говорит: "Ваша строка содержит 0 строчных букв, 0 прописных букв, 0 символов, 0 чисел" и т.д. Я предполагаю, что это происходит потому, что она не проходит требования к операторам if. Я попытался использовать strcmp вместо этого, но не повезло.
(Пожалуйста, несите меня, поскольку я очень новичок в C)
Вот мой код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
char upCase [] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
char lowCase [] = {"abcdefghijklmnopqrstuvwxyz"};
char numbers [] = {"1234567890"};
char symbols [] = {"!#$%&'()*+-./:;<=>?@[\]^_'~"};
char passwordCheck [15+1];
int numCount = 0;
int lCaseCount = 0;
int uCaseCount = 0;
int symbolCount = 0;
int i = 0;
int randLCase, randNum, randUCase, randSymbol;
int charCount = 0;
void main()
{
fflush(stdin);
printf("\nEnter your password for checking: ");
scanf("%s", passwordCheck); // reads number
if (strlen(passwordCheck) > 15)
{
printf("'%s' is too long.\nIt must be between 9 and 15 characters", passwordCheck);
}
else if (strlen(passwordCheck) < 9)
{
printf("'%s' is too short.\nIt must be between 9 and 15 characters", passwordCheck);
}
else
{
int j;
int upCaseCheck, lowCaseCheck, symbolCheck, numCheck;
printf("Checking password '%s'..\n", passwordCheck);
for (j = 0 ; j >= strlen(passwordCheck); j++)
{
// check amount of uppercase characters in user password
for (upCaseCheck=0; upCaseCheck <= strlen(upCase); upCaseCheck++)
{
if (passwordCheck[j] == upCase[upCaseCheck])
{
uCaseCount++;
}
}
// check amount of lowercase characters in user password
for (lowCaseCheck=0; lowCaseCheck <= strlen(lowCase); lowCaseCheck++)
{
if (passwordCheck[j] == lowCase[lowCaseCheck])
{
lCaseCount++;
}
}
// check amount of numbers in user password
for (numCheck=0; numCheck <= 15; numCheck++)
{
if (passwordCheck[j] == numbers[numCheck])
{
numCount++;
}
}
// check amount of symbols in user password
for (symbolCheck=0; symbolCheck <= strlen(symbols); symbolCheck++)
{
if (passwordCheck[j] == symbols[symbolCheck])
{
symbolCount++;
}
}
} // end outer for
printf("Your password %s contains:\n %d numbers\n %d uppercase letters\n %d lowercase numbers\n %d symbols",
passwordCheck, numCount, uCaseCount, lCaseCount, symbolCount);
fclose(fp);
printf("\n\n");
system("pause");
}
Заранее спасибо за любую помощь.
У вас есть проблемы с ограничениями цикла:
for (j = 0 ; j >= strlen(passwordCheck); j++)
немедленно false, поэтому все внутри этого цикла не будет выполнено.
Затем, чтобы "исследовать" строку от 0 до ее последнего символа, проверка
для (j = 0; j <длина; j++)
и не <=
.
Эта строка
for (j = 0 ; j >= strlen(passwordCheck); j++) /
должен выглядеть так
for (j = 0 ; j < strlen(passwordCheck); j++)
Как и при инициализации j
в 0
а затем при тестировании j
для be >= strlen(...)
, причем последний, скорее всего, возвращает что-то большее 0
, цикл выходит без какой-либо итерации.