You need to enable JavaScript to run this app. 如何实现引导用户反复输入正确密码直至校验通过(附C语言switch代码)
优惠活动
大模型
产品
解决方案
定价
更多

如何实现引导用户反复输入正确密码直至校验通过(附C语言switch代码)

C语言密码持续校验功能的实现方案

现有代码的核心问题

当前基于switch分支搭建的交互流程,没有配置循环控制逻辑,完全达不到“持续引导用户输入正确密码、直到校验通过”的交互要求。现有分支的具体实现:

  • default分支:直接输出通用欢迎语
  • case 1密码校验分支:仅完成单次流程执行:输出密码输入提示、用scanf读取用户输入、调用strcmp(用于字符串等值比对的标准库函数)将输入值与预设的rpassword常量对比——比对匹配时输出医院管理系统欢迎语,不匹配时仅提示重输一次,流程就会跳出分支,无法回到输入步骤重复引导。

落地修改方法

不需要推翻原有switch分支结构,只需要在case 1的代码块内嵌入独立的校验循环,把单次密码比对逻辑包进无限循环,只有密码校验通过时才跳出循环,走后续系统流程。
修改后的核心代码片段参考:

int select_opt;
char rpassword[20] = "admin123"; // 预设的合法系统密码
// ... 外层逻辑获取用户的功能选择值存入select_opt

switch(select_opt){
    case 1: {
        char input_pwd[20];
        // 持续密码校验循环
        while(1){
            printf("请输入系统访问密码:");
            scanf("%s", input_pwd);
            // strcmp返回值为0,代表两个字符串完全一致
            if(strcmp(input_pwd, rpassword) == 0){
                printf("密码校验通过,欢迎进入医院管理系统\n");
                break; // 校验成功,跳出密码输入循环
            }
            // 校验不匹配时,循环自动回到输入提示步骤,无需额外写跳转
            printf("密码输入错误,请重新输入\n");
        }
        break; // 跳出case 1分支
    }
    default:
        printf("通用欢迎语\n");
        break;
}

优化提醒

  • 循环作用域严格限制在case 1的代码块内,不会干扰其他case分支的原有执行逻辑,改动量最小。
  • 如果需要增加安全限制,可以在循环中添加错误计数器,累计输错次数达到阈值(比如5次)后直接退出程序,避免无限尝试。
  • 给存储输入密码的数组设置足够的长度,避免scanf读取超长输入造成缓冲区溢出。

内容的提问来源于stack exchange,提问作者Ravindu Dharmadasa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 15:45:02