新手写c,switch case报错,求解答

原题: 输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。


#include <stdio.h>

int main()
{
    int year,month;
    scanf("%d %d",&year,&month);
    switch (month)
    case 1:
        printf("31\n");
        break;
    case 2:
        if(year%4==0 && year%100!=0 || year%400==0) 
            printf("29");
        else
            printf("28");
        break;
    case 3:
            printf("31");
            break;
    case 4:
            printf("30");
            break;
    case 5:
            printf("31");
            break;
    case 6:
            printf("30");
            break;
    case 7:
            printf("31");
            break;
    case 8:
            printf("31");
            break;
    case 9:
            printf("30");
            break;
    case 10:
            printf("31");
            break;
    case 11:
            printf("30");
            break;
    default:
            printf("31");
    return 0;
}

编译后报错出现这两玩意
[Error] break statement not within loop or switch
[Error] case label not within a switch statement

switch没加括号

  1. switch语句缺少{}。switch 语句应该写为:
switch (month) {
case 1:
    ...
    break;
case 2:
    ...    
}
  1. break语句不在loop或switch块中。每个case后应该跟相应的程序块,然后break终止case。

  2. case label不在switch语句中。case 1: 不应该单独写,应该在switch后面。

switch (month) {
case 1:
    printf("31\n");
    break;
case 2:
    ...
    break;
case 3:
   ...  
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章:C语言入门实战(8):switch-case计算下一天的年月日(平年/闰年计算) 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: 【第55题】根据不同输入进行不同输出 | switch case 分支语句的应用中的 一、题目描述 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      循环输入。每组数据输入一个数组 aaa,然后分情况进行输出:
      1)a = 1,输出 “一”;
      2)a = 10,输出 “十”;
      3)a = 100,输出 “百”;
      4)a = 1000,输出 “千”;
      5)a = 10000,输出 “万”;
      6)其它请款,输出 “无法识别”;
    当没有任何输入时,程序结束。

  • 以下回答来自chatgpt:

    在C语言中,switch语句中的case标签必须是一个常量表达式。错误1和错误2是因为你在switch语句中使用的表达式不是一个常量。

    解决这个问题的方法是使用if-else语句来实现条件判断。以下是修改后的代码:

    #include <stdio.h>
    
    int main() {
        int year, month, days;
    
        printf("请输入年份和月份:");
        scanf("%d %d", &year, &month);
    
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
            days = 31;
        } else if (month == 4 || month == 6 || month == 9 || month == 11) {
            days = 30;
        } else if (month == 2) {
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
                days = 29;
            else
                days = 28;
        } else {
            printf("无效的月份\n");
            return 0;
        }
    
        printf("这一年的%d月有%d天\n", month, days);
    
        return 0;
    }
    

    这样修改后的代码将根据用户输入的年份和月份,使用if-else语句进行条件判断,得到正确的天数,并输出结果。

    希望对你有所帮助!


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^