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

如何正确使用switch case?代码输入非1月份却始终输出January

问题分析与修复方案

你的switch语法本身没问题,但程序输出异常的根本原因不在switch,而是前面的条件判断犯了两个关键错误:

  • 用赋值运算符=代替了比较运算符==:所有if (month = ...)的写法都是给month赋值,而非判断它是否等于某个值。比如if (month = 1, 3, 5, 7, 8, 10, 12)里,逗号表达式的结果是最后一个值12,同时month会被强制赋值为1,这直接导致后面的switch永远进入case 1分支,输出January。

  • 错误使用逗号表达式判断多值:你想判断month是否属于某一组数字,但逗号表达式无法实现这个逻辑,必须用逻辑或||连接多个month == 数值的判断。

另外还有两个小问题:

  • case 6里的输出字符串拼写错误,Jne应该是June
  • 二月的日期判断没有考虑闰年(虽然你没提这个问题,但完善代码时可以加上)

修正后的代码

#include <stdio.h>

int main()
{
    int month, date, year;

    printf("Enter Month Number: ");
    scanf("%d", &month);

    if (month > 12 || month < 1) { // 补充month小于1的判断
        printf("Invalid Month! please choose a number between 1 and 12");
    }
    else {
        printf("\nEnter Date Number: ");
        scanf("%d", &date);

        // 用逻辑或判断多值,用==比较
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
            if (date > 31 || date < 1) { // 补充date小于1的判断
                printf("\nInvalid Date! please choose a number between 1 and 31");
            }
            else {
                printf("\nEnter Year: ");
                scanf("%d", &year);
                if (year > 9999 || year < 1000) { // 合并重复判断
                    printf("\nPlease make sure your year is correct!");
                }
                else {
                    switch(month){
                        case 1:
                            printf("\nJanuary %d, %d", date, year);
                            break;
                        case 3:
                            printf("\nMarch %d, %d", date, year);
                            break;
                        case 5:
                            printf("\nMay %d, %d", date, year);
                            break;
                        case 7:
                            printf("\nJuly %d, %d", date, year);
                            break;
                        case 8:
                            printf("\nAugust %d, %d", date, year); // 把Aug改成更规范的August
                            break;
                        case 10:
                            printf("\nOctober %d, %d", date, year);
                            break;
                        case 12:
                            printf("\nDecember %d, %d", date, year);
                            break;
                    }
                }
            }
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11) {
            if (date > 30 || date < 1) {
                printf("\nInvalid Date! please choose a number between 1 and 30");
            }
            else {
                printf("\nEnter Year: ");
                scanf("%d", &year);
                if (year > 9999 || year < 1000) {
                    printf("\nPlease make sure your year is correct!");
                }
                else {
                    switch(month){
                        case 4:
                            printf("\nApril %d, %d", date, year);
                            break;
                        case 6:
                            printf("\nJune %d, %d", date, year); // 修正拼写错误
                            break;
                        case 9:
                            printf("\nSeptember %d, %d", date, year);
                            break;
                        case 11:
                            printf("\nNovember %d, %d", date, year);
                            break;
                    }
                }
            }
        }
        else if (month == 2) {
            // 新增闰年判断逻辑
            printf("\nEnter Year: ");
            scanf("%d", &year);
            if (year > 9999 || year < 1000) {
                printf("\nPlease make sure your year is correct!");
            }
            else {
                int is_leap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
                if (date > 29 || date < 1) {
                    printf("\nInvalid Date! please choose a number below %d", is_leap ? 29 : 28);
                }
                else if (!is_leap && date == 29) {
                    printf("\nInvalid Date! %d is not a leap year, February only has 28 days", year);
                }
                else {
                    printf("\nFebruary %d, %d", date, year);
                }
            }
        }
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者Ced Wicked

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:50:40