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

Do-While循环在main_menu正常运行,admin_menu等菜单失效问题求助

问题分析与解决方案

核心错误:admin_menu的合法性判断逻辑完全错误

你代码中admin_menu里的输入校验条件if (option != 1 || option != 2 || option != 3 || option != 4 || option != 5)逻辑彻底错误:
逻辑或||的特性是只要有一个条件为真,整个表达式就为真。对于任意整数option,它不可能同时等于1、2、3、4、5,所以这个条件永远成立——不管你输入有效选项(1-5)还是0,都会打印"无效选项"提示。当输入0时,循环条件while(option !=0)不满足,循环直接退出回到main_menu,导致你误以为程序直接终止。

修复方法

将判断条件改为当输入既不是0,也不是1-5时才提示错误,使用逻辑与&&连接所有不等于的条件,或者用范围判断简化:

// 写法1:明确判断所有非法值
if (option != 0 && option != 1 && option != 2 && option != 3 && option != 4 && option != 5)
    printf("Insira uma opcao valida!!! \n");

// 写法2:更简洁的范围判断
if (!(option >= 1 && option <= 5) && option != 0)
    printf("Insira uma opcao valida!!! \n");

其他需要修复的问题

  1. main_menu同样存在逻辑错误
    main_menu里的校验条件if (option != 1 || option != 2 || option != 3 || option != 4 || option != 99)和admin_menu犯了同样的错误,会导致输入有效选项时也弹出错误提示,修正为:

    if (option != 0 && option != 1 && option != 2 && option != 3 && option != 4 && option != 99)
        printf("Insira uma opcao valida!!! \n");
    
  2. patient_menu和doctor_menu的scanf语法错误
    这两个菜单中的scanf("%d", option);缺少取地址符&,会导致未定义行为(比如程序崩溃、变量值异常),必须修正为:

    scanf("%d", &option);
    
  3. 可选优化:添加switch的case 0分支
    在admin_menu的switch中明确处理0选项,让代码逻辑更清晰:

    switch(option){
        case 1: printf("Working\n");/*funtion to print queue      */break;
        case 2: printf("Working\n");/*funtion to edit a patient   */break;
        case 3: printf("Working\n");/*funtion to edit a doctor    */break;
        case 4: printf("Working\n");/*funtion to remove a patient */break;
        case 5: printf("Working\n");/*funtion to remove a doctor  */break;
        case 0: printf("Saindo do menu admin...\n"); break;
    }
    

修正后的admin_menu完整代码

void admin_menu(){
    int option;
    
    do{
        printf("\n1: Verificar lista de utentes");
        printf("\n2: Alterar informacoes utentes");
        printf("\n3: Alterar informacoes medicos");
        printf("\n4: Remover utente");
        printf("\n5: Remover medico");
        printf("\n0: Sair\n");
        
        scanf("%d", &option);       
        
        switch(option){
            case 1: printf("Working\n");/*funtion to print queue      */break;
            case 2: printf("Working\n");/*funtion to edit a patient   */break;
            case 3: printf("Working\n");/*funtion to edit a doctor    */break;
            case 4: printf("Working\n");/*funtion to remove a patient */break;
            case 5: printf("Working\n");/*funtion to remove a doctor  */break;
            case 0: printf("Saindo do menu admin...\n"); break;
        }
        
        // 修正后的合法性判断
        if (option != 0 && option != 1 && option != 2 && option != 3 && option != 4 && option != 5)
            printf("Insira uma opcao valida!!! \n");
    
    }while(option != 0);
    
    system("cls");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:25:05