Я пишу простую программу, которая проверяет пароль с 8 символами с минимум двумя номерами. Это, как правило, присваивается новичкам, но я не мог найти ответы на свой вопрос в любом месте в Интернете и не смог выполнить задание, но мне все равно хотелось бы узнать, как это сделать, и подумать, что это поможет другим новичкам, таким как я.Как отличить типы данных в строке с C на Linux?
Мне нужно проверить, что строка, содержащая как буквы, так и цифры, содержит не менее двух чисел.
isalpha() или isdigit() считывает только один символ за раз, а strspn (,) или strcspn() прекращают вычислять длину, когда он попадает в байт, не найденный в другом сегменте, поэтому, если я ввожу пароль, например «a1b2c3», используя одну из этих функций, выход будет равен 1 или 0. Я также попытался переключить типы данных с char на int и наоборот.
Это то, что я до сих пор:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <ncurses.h>
int main() {
char password[8];
char numVerify[] = "1, 2, 4, 5, 6, 7, 8, 9";
int valid = 10
do {
printf("Enter Password: \n");
scanf("%s",password);
int a = strspn(password,numVerify);
if (strlen(password) <= 8 && a >= 2) {
printf("You have entered a valid password");
break;
}
else {
printf("\e[2J\e[H");
printf("Invalid Password!\nEnter password with a maximum of 8 characters and at least 2 numbers\n");
}
}while(valid > 5);
return 0;
}
Переменная «пароль» должна быть «char password [9];» Кроме того, strspn() не делает то, что я думаю, вы думаете, что это так. Возможно, вам стоит просто подсчитать количество символов в «пароле», которое «isdigit()» возвращает ненулевое значение. После тестирования всех символов в «пароле», если ваш digit_count больше или равен 2, он переходит к редактированию. – TonyB