C语言密码有效性验证程序报错排查求助
密码验证C程序问题排查与修复
我帮你梳理了下问题,你目前的代码只写了开头框架,核心的密码验证逻辑还没实现,而且void main()不符合C语言标准规范,这可能也是程序运行异常的原因之一。下面是完整的修复版代码,以及详细的逻辑说明:
修正后的完整代码
// 验证密码:至少包含1个大写字母、1个小写字母、1个数字和1个特殊字符 #include <stdio.h> #include <ctype.h> #include <string.h> int main() { char pass[20]; int has_upper = 0, has_lower = 0, has_digit = 0, has_special = 0; printf("请输入密码(最多19个字符):"); scanf("%s", pass); // 遍历密码的每个字符,检查类型 for (int i = 0; pass[i] != '\0'; i++) { char c = pass[i]; if (isupper(c)) { has_upper = 1; } else if (islower(c)) { has_lower = 1; } else if (isdigit(c)) { has_digit = 1; } else { // 非字母数字的字符判定为特殊字符 has_special = 1; } } // 检查所有条件是否满足 if (has_upper && has_lower && has_digit && has_special) { printf("密码符合要求!\n"); } else { printf("密码不符合要求!请确保包含:1个大写字母、1个小写字母、1个数字和1个特殊字符\n"); } return 0; }
关键修复点说明
- 标准main函数:把
void main()改为int main()并返回0,这是C语言的标准写法,避免运行时的未定义行为。 - 标志位初始化:新增四个整型变量,分别用来标记是否检测到大写字母、小写字母、数字和特殊字符,初始值设为
0(未检测到)。 - 字符遍历与类型判断:通过
for循环遍历密码的每个字符,利用ctype.h库的isupper()、islower()、isdigit()函数快速判断字符类型,非字母数字的字符则判定为特殊字符。 - 条件验证:最后通过逻辑与运算,检查四个标志位是否都为
1(即所有条件都满足),再输出对应的提示信息。
内容的提问来源于stack exchange,提问作者Haythem Tarchouna
相关产品推荐
相关产品推荐

