关于C语言switch语句使用逻辑比较结果的可行性咨询
在C语言的switch表达式中使用逻辑比较结果是否可行?
这种写法是完全合法可行的。
在C语言里,逻辑表达式(比如day > 31 || month > 12)的求值结果是整数类型:当表达式为真时结果是1,为假时结果是0,而switch语句的表达式要求是整数类型(包括char、short、int等),所以完全符合语法要求。
看你提供的代码:
- 当
day > 31或者month > 12任意一个条件成立时,逻辑表达式结果为1,switch会匹配不到case 0,最终走default分支输出Invalid; - 当两个条件都不成立时,表达式结果为
0,会进入case 0分支输出Valid,完全符合你的预期逻辑。
额外提示
- 虽然写法合法,但这种二分支场景用
if-else可读性会更好,代码逻辑更直观:
if (day > 31 || month > 12) { printf("Invalid"); } else { printf("Valid"); }
- 你的
scanf格式符有问题:如果要求用户输入dd_mm_yyyy格式的日期,当前的%hd%hd%hd无法正确解析下划线分隔的输入,应该改成scanf("%hd_%hd_%hd", &day, &month, &year);才能正确读取带下划线的日期。
内容的提问来源于stack exchange,提问作者Jeep nN
相关产品推荐
相关产品推荐

