简易密码验证与强度检测工具
一、题目描述编写 C 语言程序实现密码验证 强度检测双功能具体需求如下预设正确密码固定为字符串Cstudy123大小写敏感第一步用户输入密码长度限制 6~16 位超出范围提示重输第二步密码合法性校验长度必须 6~16 位非法则循环提示重输第三步密码验证输入正确则提示 “密码验证成功”错误则提示 “密码错误请重新输入”最多给 3 次输入机会3 次全错直接退出程序第四步验证成功后自动检测密码强度输出强度等级弱 / 中 / 强检测规则见题目要求。二、题目要求必须使用字符数组存储密码禁止指针进阶用法)预设密码固定禁止修改核心功能独立封装成 3 个函数密码长度校验、密码强度检测、密码验证逻辑禁止所有代码写在 main 函数严格输入规则密码只能输入可见字符无需特殊校验仅限制长度 6~16 位支持输入带字母、数字的组合密码强度检测规则3 条满足对应条件判定等级弱仅包含纯字母 或 纯数字中同时包含字母 数字无其他要求强同时包含大写字母 小写字母 数字输出格式清晰分模块展示输入提示、验证结果、强度等级语言简洁无冗余信息适合博客排版展示。三、输入输出示例3 种场景覆盖所有需求示例 1验证成功 密码强度 “强”plaintext 密码验证系统 请输入密码长度6~16位Cstudy123密码验证成功密码强度检测结果强示例 2密码长度非法 3 次输入错误退出plaintext 密码验证系统 请输入密码长度6~16位123输入非法密码长度必须6~16位请重输C123输入非法密码长度必须6~16位请重输abcdefg密码错误剩余2次机会请输入密码长度6~16位12345678密码错误剩余1次机会请输入密码长度6~16位abc123456密码错误3次机会已用完程序退出示例 3验证成功 密码强度 “中 / 弱”plaintext 密码验证系统 请输入密码长度6~16位cstudy123密码验证成功密码强度检测结果中 密码验证系统 请输入密码长度6~16位cstudyabc密码验证成功密码强度检测结果弱四、解题思路引导拿到题目不用慌按 4 步拆解逻辑超清晰博客里也能同步这个思路引导方便读者理解预设固定密码定义字符数组存储预设密码Cstudy123全程固定不变分层输入校验先校验密码长度6~16 位非法则循环重输再进行密码匹配验证封装核心函数长度校验函数接收密码数组返回 1合法/0非法判断长度是否 6~16 位强度检测函数接收密码数组遍历字符统计是否含大写、小写、数字按规则返回 “弱 / 中 / 强”密码验证函数接收输入密码和预设密码返回 1匹配成功/0失败次数控制逻辑用循环控制最多 3 次输入机会每次失败提示剩余次数3 次全错直接退出成功则调用强度检测函数输出结果。五、完整参考代码c运行#include stdio.h#include string.h// 预设正确密码固定不变大小写敏感#define RIGHT_PASSWORD Cstudy123// 密码长度限制#define MIN_LEN 6#define MAX_LEN 16// 函数声明3个核心功能新手友好结构清晰// 1. 校验密码长度返回1合法0非法int checkLength(char pwd[]) {int len strlen(pwd);if (len MIN_LEN len MAX_LEN) {return 1;}return 0;}// 2. 检测密码强度返回弱/中/强char* checkStrength(char pwd[]) {int hasUpper 0; // 是否含大写字母int hasLower 0; // 是否含小写字母int hasDigit 0; // 是否含数字// 遍历密码每个字符标记类型for (int i 0; pwd[i] ! \0; i) {if (pwd[i] A pwd[i] Z) {hasUpper 1;} else if (pwd[i] a pwd[i] z) {hasLower 1;} else if (pwd[i] 0 pwd[i] 9) {hasDigit 1;}}// 按规则判定强度if (hasUpper hasLower hasDigit) {return 强;} else if ((hasUpper || hasLower) hasDigit) {return 中;} else {return 弱;}}// 3. 密码验证返回1匹配成功0失败int checkPassword(char inputPwd[], char rightPwd[]) {if (strcmp(inputPwd, rightPwd) 0) {return 1;}return 0;}int main() {char inputPwd[20]; // 存储输入密码预留足够空间int chance 3; // 初始3次输入机会printf( 密码验证系统 \n);// 循环控制3次输入机会while (chance 0) {printf(请输入密码长度%d~%d位, MIN_LEN, MAX_LEN);scanf(%s, inputPwd); // 无空格密码// 第一步校验密码长度if (!checkLength(inputPwd)) {printf(输入非法密码长度必须%d~%d位请重输\n, MIN_LEN, MAX_LEN);continue;}// 第二步密码验证if (checkPassword(inputPwd, RIGHT_PASSWORD)) {printf(密码验证成功\n);// 第三步检测并输出密码强度char* strength checkStrength(inputPwd);printf(密码强度检测结果%s\n, strength);break; // 验证成功退出循环} else {// 密码错误减少一次机会chance--;if (chance 0) {printf(密码错误剩余%d次机会\n, chance);} else {printf(密码错误3次机会已用完程序退出\n);}}}return 0;}六、易错点总结预设密码大小写敏感C 语言中strcmp函数严格区分大小写输入cstudy123和Cstudy123判定为不同密码这是题目要求也是新手易忽略点密码长度统计必须用strlen获取密码实际长度不能手动计数避免输入带隐藏字符导致统计错误强度检测标记逻辑遍历字符时只要出现对应类型就标记为 1后续无需重复标记比如多个大写字母只需要标记一次hasUpper13 次机会控制每次密码错误后chance--当chance0时直接退出不能继续循环避免无限输入。