首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的代码有什么问题?if语句和切换情况的问题

我的代码有什么问题?if语句和切换情况的问题
EN

Stack Overflow用户
提问于 2021-03-23 20:48:50
回答 1查看 55关注 0票数 0

关于这个问题:

编写一个C程序,为作为输入数据提供的日期确定一年中的天数(1至366)。例如,1994年1月1日是第一天,1993年12月31日是第365天。1996年12月31日是366天,因为1996年是闰年。如果一个年份可以被四个整除,那么它就是闰年,但任何可以被100整除的年份,只有在它可以被400整除的情况下,才是闰年。您的程序应该接受月、日和年作为整数。如果使用闰年调用,则包含返回1的函数跃变,否则为0。

运行代码的示例:

请输入日期1=31,月1-12,年(例如2020年)为整数:

12 2 2021

输出:

日数: 43

我编写了这段代码,但是每当我运行它并输入日期、月份和年份值时,它返回为空。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int leap_year(int year);
int main()
{
   int day,month,year;
   printf("Enter the date:(DD MM YYYY)\n");
   scanf("%d%d%d",&day,&month,&year);
   if ((day>31 || day<1) || (month<1 || month>12))
       printf("Error! Invalid day or month.\n");

   else
   {
        switch(month)
       {
       case '1':
           printf("Day Number: %d.\n",day);
           break;
       case '2':
           if ((leap_year(day)==1 && day>29)|| (leap_year(day)==0 && day>28))
               printf("Error! Invalid day.\n");
           else
           printf("Day Number: %d.\n",day+31);
           break;
       case '3':
           if (leap_year(year)==1)
           printf("Day Number: %d.\n",day+60);
           else if (leap_year(year)==0)
           printf("Day Number: %d.\n",day+59);
           break;
       case '4':
           if (day>30)
           printf("Error! Invalid day.\n");
           else if (leap_year(year)==1)
           printf("Day Number: %d.\n",day+91);
           else if (leap_year(year)==0)
           printf("Day Number: %d.\n",day+90);
           break;
       case '5':
           if (leap_year(year)==1)
           printf("Day Number: %d.\n",day+121);
           else if (leap_year(year)==0)
           printf("Day Number: %d.\n",day+120);
           break;
       case '6':
           if (day>30)
           printf("Error! Invalid day.\n");
           else if (leap_year(year)==1)
           printf("Day Number: %d.\n",day+152);
           else if (leap_year(year)==0)
           printf("Day Number: %d.\n",day+151);
           break;
       case '7':
           if (leap_year(year)==1)
           printf("Day Number: %d.\n",day+182);
           else if (leap_year(year)==0)
           printf("Day Number: %d.\n",day+181);
           break;
       case '8':
           if (leap_year(year)==1)
           printf("Day Number: %d.\n",day+213);
           else if (leap_year(year)==0)
           printf("Day Number: %d.\n",day+212);
       case '9':
           if (day>30)
           printf("Error! Invalid day.\n");
           else if (leap_year(year)==1)
           printf("Day Number: %d.\n",day+244);
           else if (leap_year(year)==0)
           printf("Day Number: %d.\n",day+243);
           break;
       case '10':
            if (leap_year(year)==1)
            printf("Day Number: %d.\n",day+274);
            else if (leap_year(year)==0)
            printf("Day Number: %d.\n",day+273);
            break;
       case '11':
            if (day>30)
            printf("Error! Invalid day.\n");
            else if (leap_year(year)==1)
            printf("Day Number: %d.\n",day+305);
            else if (leap_year(year)==0)
            printf("Day Number: %d.\n",day+304);
            break;
       case '12':
            if (leap_year(year)==1)
            printf("Day Number: %d.\n",day+335);
            else if (leap_year(year)==0)
            printf("Day Number: %d.\n",day+334);
            break;
       }

   }


}

int leap_year(int year)
{
   int leap_day;
   if
   (year%100==0 && year%400==0)
   {leap_day=1;
   return leap_day;}

   else if(year%4==0)
       {leap_day=1;
   return leap_day;}

   else
       leap_day=0;
   return leap_day;
}

知道为什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-23 20:53:45

你用的是字符而不是数字:

代码语言:javascript
复制
case '1':

这是为了寻找一个值,它是字符'1'的编码,在ASCII中是48。相反,你想:

代码语言:javascript
复制
case 1:

其他案件也是如此。

此外,检查您的闰年的逻辑年可除以100,但不是400。

不同的是,代码中散布了很多神奇的数字。实现这一功能的一个更好的方法是逆转用例的顺序,并通过用例减少每个月的天数。这就只剩下每个月的天数了,只剩下闰年检查到二月了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66771090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档