news 2026/4/23 17:23:27

简易密码验证与强度检测工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简易密码验证与强度检测工具

一、题目描述
编写 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,后续无需重复标记,比如多个大写字母只需要标记一次hasUpper=1;
3 次机会控制:每次密码错误后chance--,当chance=0时直接退出,不能继续循环,避免无限输入。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 17:22:27

YOLO11涨点优化:Block优化 | 结合FasterNet核心PConv (Partial Convolution),大幅削减浮点运算,FPS直线飙升

一、引言:当FLOPs不再是唯一答案——轻量化部署的困局 计算机视觉领域,目标检测模型正在经历一场从“精度为王”到“效率为王”的深刻转型。根据Ultralytics官方博客介绍,YOLO11通过增强特征提取功能和更高效的架构设计,在实时物体检测、实例分割和姿态估计等多个任务上都…

作者头像 李华
网站建设 2026/4/23 17:20:22

收藏备用!超好用的M3U8在线播放器,无广告免安装,手机电脑通用

平时我们在工作、学习或娱乐中&#xff0c;难免会遇到M3U8格式的直播流、视频分片——电脑自带的播放器打不开&#xff0c;下载专用客户端又太臃肿&#xff0c;占用手机、电脑内存&#xff1b;网上找的网页版工具&#xff0c;要么满屏广告、弹窗不断&#xff0c;要么兼容性差、…

作者头像 李华
网站建设 2026/4/23 17:14:06

避坑指南:LabVIEW与Zebra GX420d打印机串口通信的那些‘坑’与最佳实践

LabVIEW与Zebra GX420d串口通信深度避坑指南 工业级标签打印的挑战与机遇 在自动化测试、生产线追溯和物流管理领域&#xff0c;Zebra GX420d工业打印机凭借其稳定性和耐用性成为许多企业的首选设备。而LabVIEW作为图形化编程的标杆工具&#xff0c;与GX420d的组合看似简单&…

作者头像 李华
网站建设 2026/4/23 17:13:19

实证论文卡壳在数据分析?虎贲等考 AI:零基础也能跑出专业结果

在本科、硕士、博士的毕业论文与科研写作中&#xff0c;数据分析往往是最让人崩溃的一关&#xff1a;不会建模、跑不出结果、看不懂回归表、软件操作复杂、数据处理耗时几天&#xff0c;最后还因为模型不规范、检验不完整被导师反复打回。尤其面对面板数据、固定效应、系统 GMM…

作者头像 李华