我正在为考试而学习,在一次旧考试中,有人问下面代码的输出是什么。我对这段代码如何输出“天:33”感到困惑。有什么方法可以轻松解释吗?
编辑:感谢您的解释,是的,我知道这段代码的逻辑没有意义(就计算给定年份给定月份的实际天数而言),它只是一个旧的考试题。
#include <stdio.h>
int calcDays(int, int);
int main(){
int days;
days = calcDays(11, 2020);
printf("days: %d\n", days);
return 0;
}
int calcDays(int month, int yr){
int days = 28;
switch(month)
{
case 2: days += 1 - yr % 4;
case 4:
case 6:
case 9:
case 11: days += 2;
default: days += 3;
}
return(days);
}
在函数内的 switch 语句中,这两个标签之间没有 break 语句
case 11: days += 2;
default: days += 3;
所以这些说法
days += 2;
days += 3;
依次进行评估。
如果有像这样的 break 语句,您可以获得预期的结果
case 11: days += 2; break;
default: days += 3;
例如,如果参数月设置为 2 那么所有这些语句
days += 1 - yr % 4;
days += 2;
days += 3
在这个代码片段中
case 2: days += 1 - yr % 4;
case 4:
case 6:
case 9:
case 11: days += 2;
default: days += 3
将被评估。
注意这个声明
days += 1 - yr % 4;
没有意义,因为除以 4 的余数可以是 0、1、2 或 3。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句