You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:07:37