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
相关产品推荐
相关产品推荐

