c 语言 一年中的第几天

问题遇到的现象和发生背景

一年中的第几天

试题描述

给定一个具体的日期,请输出,这一天是当年的第几天?

输入

输入格式如下:
year-month-day
如:
1999-9-9
代表1999年9月9日。

输出

输出一个整数,代表这一天为那一年的第多少天。

输入示例

2000-1-31

输出示例

31

数据范围

输入为合法的日期

问题相关代码,请勿粘贴截图

#include<stdio.h>
#include<stdlib.h>
int is_leap_year(int year)
{
(这一行正文内容不能输入,故删去)
{
return 1;
}
else
{
return 0;
}
}
int com(int year, int month, int day)
{
int mon_day[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
int ret = is_leap_year(year);
int mon = 0;
int i = 0;
if (ret)
{
mon_day[1] = 29;
}
for (i = 0; i < month - 1; i++)
mon += mon_day[i];
}
return mon + day;
}
int main()
{
int year = 0;
int month = 0;
int day = 0;
int num = 0;
scanf("%d*3", &year, &month, &day); (这里三个%d也不能输?好吧)
printf("%d", com(year, month, day));
system("pause");
return 0;
}

一直在报错
有没有更好的解决办法?

把你的代码稍作整理,Dev C++中能编译通过,且测试正确:

#include<stdio.h>
#include<stdlib.h>

int is_leap_year(int year)
{
    if ((year%4==0 && year%100!=0) || (year%400==0))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int com(int year, int month, int day)
{
    int mon_day[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int i, mon = 0;
    
    if ( is_leap_year(year))
    {
        mon_day[1] = 29;
    }
    for (i = 0; i < month - 1; i++)
    {
        mon += mon_day[i];
    }
    
    return mon + day;
}

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

    scanf("%d %d %d", &year, &month, &day);
    printf("%d年%d月%d日是该年的第%d天。\n", year,month,day,com(year, month, day));

    system("pause");
    return 0;
}
#include <stdio.h>
int  DayofYear(int year, int month, int day) {
 int i,mm,days=0;
 int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};

 /*判断是否为闰年*/
  if((year%4==0 && year%100!=0) || (year%400==0)){
    mm=1;
  } 
  else{
    mm=0;
  }

  /*如果为闰年,则改变二月份的天数*/   
  if(mm==1){
    a[1]=29;
  }

  /*因为数组第一个是由0开始,并由month-1个月遍历,所以为month-2*/
  for(i=month-2;i>=0;i--){
    day=a[i];
    days+=day;
  }
    return days;
  }

int main(){
  int year,month,day;
  printf("Please enter year, month, day:");
  scanf("%d-%d-%d",&year,&month,&day);
  day=day+DayofYear(year,month,day);
  printf("yearDay = %d\n",day);
}



#include <stdio.h>
#define True 1
#define False 0 
void main()
{
    int year,month,day; //定义变量年月日。此行代码,不可修改!!!
    int sum,flag;
    printf("输入日期格式为yyyy-mm-dd:");
    scanf("%d-%d-%d",&year,&month,&day);  //接收输入的数据   此行代码,不可修改!!!
     switch(month)
    {
        case 1:sum=0;break;
        case 2:sum=31;break;
        case 3:sum=(31+28);break;
        case 4:sum=(31+28+31);break;
        case 5:sum=(31+28+31+30);break;
        case 6:sum=(31+28+31+30+31);break;
        case 7:sum=181;break;
        case 8:sum=212;break;
        case 9:sum=243;break;
        case 10:sum=273;break;
        case 11:sum=304;break;
        case 12:sum=334;break;
        default:printf("输入有误");break; 
    }
    sum+=day;
    if(year%400==0||(year%4==0&&year%100!=0)) {
        flag=True;
    } else {
       flag=False;
    }
    if(flag==True&&month>2) {
        sum++;
    }
    printf("%d年%d月%d日是这一年的第%d天",year,month,day,sum);
    printf("\n");
}

img