我正在用C语言创建一个密码检查器。用户输入他们的密码,程序必须检查它是否符合格式aa$B1BB$B$$aB
(其中a
代表数字,B
代表符号,$
代表数字)。
我目前已经编写了一个数字数组0
到9
,符号和字母,并试图创建一系列迭代循环来搜索密码的每个字符,以匹配它应该满足的标准数组。这是我想到的最简单的方法,但如果有人有更好的建议,我会非常感激。
我目前面临的错误是,程序没有像我预期的那样运行。如果密码不是13个字符长,它应该调用else if
语句,但它没有。到目前为止,我只创建了用于检查数字1
、2
、3
和4
的语句。printf("Password ok #")
语句仅用于测试目的。
#include <string.h>
#include <stdio.h>
int main() {
char password[20];
int i, length;
int numbers[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
char letters[] = { 'a', 'b', 'c', 'c', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z' };
char symbols[] = { '!', '@', '#', '$', '%', '^', '&', '*',
'-', '_', '+', '=' };
printf("Password rules:\n"
" --------------------- \n"
" must follow the format ee$L1LL$L$$eL \n"
" --------------------- \n"
" Please enter your current password:");
scanf("%c", password);
printf("%19s", password);
length = strlen(password);
if (length = 13) {
printf("Password ok 1");
for (int i = 0; i < strlen(letters); i++) {
if ((password[1] == letters[i]) && (password[2] == letters[i])) {
printf("Password ok 2");
} else {
printf("Digits 1 or 2 do not fit the correct format");
}
}
for (int i = 0; i < strlen(symbols); i++) {
if (password[3] == symbols[i]) {
printf("Password ok 3");
} else {
printf("Digit 3 does not fit the correct format");
}
}
for (int i = 0; i < strlen(letters); i++) {
if (password[4]==symbols[i]) {
printf("Password ok 4");
} else {
printf("Digit 3 does not fit the correct format");
}
}
} else if (length != 13) {
printf("\nPassword must be 13 digits long");
}
}
3条答案
按热度按时间wfsdck301#
如果你被允许使用
ctype
宏,比如isupper()
,islower()
,那么你可以对每个模式字符调用它们。或者你可以为它们编写自己的函数,比如:
static inline
告诉编译器这个函数是这个translation-unit
(当前文件)的本地函数&如果可能的话,请求它在调用位置内联函数。这减轻了调用小函数的开销。x7yiwoj42#
检查密码是否符合
使用
fgets()
读取,sscanf()
扫描,"%n"
检测扫描结束。一种更健壮的方法是在字母[a-z]不连续的情况下使用一系列
strchr()
调用。IMO,使用更慷慨的读取缓冲区。
8fsztsew3#
下面的代码是完美的使用ctype.h
输出为:
计数下限:7
上限计数:1
数字计数:3
符号计数:1
您的密码有效!