为什么这个 c 代码的结果是“days: 33”而不是“days: 30”?

特伦特乙

我正在为考试而学习,在一次旧考试中,有人问下面代码的输出是什么。我对这段代码如何输出“天: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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么这个求和代码的结果是错误的?

为什么这个 C# 代码乱序执行?不是 ASYNC(至少我认为不是)

为什么这个'C'代码的输出是这样的?

为什么这个 C 程序显示这个结果?

为什么在这个c float转换中结果是nan?

为什么这个除法的结果是“inf”?

为什么这个比较的结果是真实的

为什么这个程序的结果是这样的?

C ++:为什么这个constexpr不是编译时间常数

为什么这个简短的C程序的结果为“ 3 2”?

为什么这个Ansi C程序没有给出结果?

为什么这个 C 代码会产生无限循环?

用Javascript为什么-'54'+ 30的结果是-24(在JavaScript中键入强制)

代码执行的结果是什么?C 运算符优先级

为什么 Scala 列表结果是这个,请关注,谢谢

为什么C循环增量的结果是随机的

为什么这个BeautifulSoup结果[]?

以下汇编代码的结果是什么?

为什么这个简单的F#代码比C#/ C ++版本慢36倍?

为什么我的C ++代码看不到这个C#类成员?

C 结构:为什么这个语句使用 . 符号来访问“赃物”而不是 ->?

为什么这个有效的 Python 代码不是有效的 Ansible Python 代码

为什么这个 C++ 程序在 Code::Blocks 和在线 IDE 之间返回不同的结果?

为什么这个 C++ 素数检查器和夏天返回错误的结果?

为什么这个 C++ 表达式的计算结果为 False?

为什么在 C 中使用这个按位宏时我的结果不正确

为什么这个 C 代码(写入 unix 管道)不无限迭代?

为什么这个 C 结构体初始化代码会产生总线错误?

为什么这个非常简单的C#方法会产生这种不合逻辑的CIL代码?