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

C语言if-else分支逻辑错误修复求助:输入任意值均执行首个分支

问题修复方案

核心问题:混淆赋值与比较运算符

你的代码里的if (get=1)是赋值操作,不是比较操作。get=1会把1赋值给变量get,同时这个表达式的结果就是1(非0值,在C中被视为布尔真),所以不管你输入什么数值,第一个if条件永远成立,只会执行goodMorning()。

要判断get是否等于某个值,必须用相等比较运算符==,把所有条件里的=替换成==。

修复后的完整代码

#include <stdio.h>

// 无返回值的函数建议用void声明,避免未定义行为
void goodMorning() {
    printf("Good morning, Aman\n"); // 加换行符让输出格式更规范
}

void goodAfternoon() {
    printf("Good afternoon, Aman\n");
}

void goodNight() {
    printf("Good night, Aman\n");
}

int main() {
    int get;

    printf("To see the magic enter the number b/w 1 to 3 -> ");
    // 增加输入有效性检查,防止非数字输入导致的逻辑异常
    if (scanf("%d", &get) != 1) {
        printf("INVALID INPUT: Not a number\n");
        return 1;
    }

    if (get == 1) {
        goodMorning();
    }
    else if (get == 2) {
        goodAfternoon();
    }
    else if (get == 3) {
        goodNight();
    }
    else {
        printf("WRONG INPUT\n");
    }

    return 0;
}

额外优化说明

  • 函数返回值修正:原代码中三个输出函数声明为int但无返回值,会触发未定义行为,改用void声明更合规。
  • 输出换行符:在printf字符串末尾添加\n,让输出自动换行,符合终端输出的常规格式。
  • 输入有效性检查:通过scanf的返回值判断输入是否为有效整数,避免非数字输入导致的程序异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:42:41