输入某年某月某日,输出这是今年的第几天,C语言问题

#include <stdio.h>
void main()
{
int day,year,month,er,sum;
printf("请输入年月日:");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)
{case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;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=sum+day;
if ((year%4==0)&&(year%100!=0)||(year%400==0))
er=1;
else
er=0;
if(er==1&&month>2);
printf("这是%d年的第%d天\n",year,sum);
}
求找错,为什么2月有31 30 29号,甚至输入2013,3,213都是正确的 我用的VC++6.0

输入年月日三个值,先累加该年之前各个月的每月天数,最后累加日期天数即可获取结果。

一、算法设计:

1、输入年月日三个值;

2、为保证程序健壮性,可以对三个值的合法性进行判断,只对合法数据进行操作;

3、累加之前各月天数;

4、累加当前日值;

5、输出结果。

二、注意点:

可以使用数组存储各个月份的天数,用循环累加。需要注意的是闰年的判断。对于闰年,2月要多加一天。

三、参考代码:

#include <stdio.h>
int main()
{
    int mdays[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//十二个月的天数。
    int y,m,d,r=0,i;
    scanf("%d%d%d",&y,&m,&d);
    if(y%400==0 || (y%4==0 && y %100 != 0))//闰年。
        mdays[1] = 29;//设置闰年二月值。
    if(y<0 || m<=0 || m>12 || d<=0 || d>mdays[m-1])//输入非法。
    {
        printf("输入年月日不合法\n");//提示并退出。
        return -1;
    }
    for(i = 0; i < m-1; i ++)//累加之前各个月。
        r+=mdays[i];
    r+=d;//累加日期值。
    printf("%d\n",r);//输出结果。
    return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-06

程序在提示输入错误日期后,就不能再输出天数了,应该直接退出。

我把所有可能输错的情况都加到代码里面去了,代码如下:

#include <stdio.h>
#include <stdlib.h>
void main()
{
int day,year,month,er,sum;
printf("请输入年月日:");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)
{case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;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("对不起,输入错误的日期!\n");
    exit(-1);//输错了日期直接退出程序
    break;
}

if ((year%4==0)&&(year%100!=0)||(year%400==0))
er=1;
else
er=0;

if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if (day<1||day>31)
{
printf("对不起,输入错误的日期!\n");
exit(-1);//输错了日期直接退出程序
}
}
else if (month==4||month==6||month==9||month==11)
{
if (day<1||day>30)
{
printf("对不起,输入错误的日期!\n");
exit(-1);//输错了日期直接退出程序
}
}
   
if (er==1&&(day<1||day>29))
{
printf("对不起,输入错误的日期!\n");
exit(-1);//输错了日期直接退出程序
}

if (er==0&&(day<1||day>28))
{
printf("对不起,输入错误的日期!\n");
exit(-1);//输错了日期直接退出程序
}

sum=sum+day;

if(er==1&&month>2)
sum+=1;

printf("这是%d年的第%d天\n",year,sum);
}

本回答被提问者采纳
第2个回答  2013-11-06
switch(month)
{case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;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;
}


这段代码设计很巧妙

但是你的问题也就是出在这段代码上

看到case 2和case 3没?

在case 2的时候,你没有对于day进行检查,所以你不知道30,31是合法的

在case 3的时候,你没有对于year进行检查,所以你没有办法知道 是+59还是58


所以你应该一开始先增加day的检查

if (day <= 0 || day > 31)
    printf("Error Day!!!")

if (mouth == 2 && day > 29)
    printf("Error Day!!!")

第3个回答  2013-11-07
程序挺好,错就错在下面判断闰年对于计算结果没有起作用,所以只要修改一处即可:
将倒数第二句
if(er==1&&month>2);

改为:
if(month>2)
sum+=er;
即可。
第4个回答  2013-11-06
那是因为你没有限制条件啊,加几个if判断就可以了追问

怎么加 如何加

输入某年某月某日,输出这是今年的第几天,C语言问题
mdays[1] = 29;\/\/设置闰年二月值。if(y<0 || m<=0 || m>12 || d<=0 || d>mdays[m-1])\/\/输入非法。{ printf("输入年月日不合法\\n");\/\/提示并退出。return -1;} for(i = 0; i < m-1; i ++)\/\/累加之前各个月。r+=mdays[i];r+=d;\/\/累加日期值。printf("%d\\n...

C语言编程:输入某年某月某日判断这一天是一年的第几天的程序是是什么...
include \\x0d\\x0a\\x0d\\x0a\/\/返回指定年月日是对应年度的第几天\\x0d\\x0aint getDays(int month,int day);\\x0d\\x0aint isRunnian(int year);\\x0d\\x0a\\x0d\\x0aint main(int argc,char* argv[])\\x0d\\x0a{\\x0d\\x0aint year=0;\\x0d\\x0aint month=0;\\x0d\\x0...

c语言编程:输入某年某月某日,计算出这一天是该年的第几天?该怎么解答啊...
\/\/输入年月日,输出是该年第几天 include<stdio.h> int sum(int month,int day){ int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int i;for(i=1;i<month;i++)day+=days[i];return(day);} int leap(year){ int leap=0;if((year%4==0&&year%100!=0)||(yea...

c语言编程:编写程序,输入某年某月某日,判断这一天是这一年的第几天...
int a1[]={31,29,31,30,31,30,31,31,30,31,30,31};int a2[]={31,28,31,30,31,30,31,31,30,31,30,31};printf("输入年月日(用逗号隔开):\\n");scanf("%d,%d,%d",&y,&m,&d);if (y%4==0&&y%100!=0||y%400==0) \/*闰年,2月29天*\/ { while (i<m-1){ s...

C语言编程:输入某年某月某日,判断这一天是这一年的第几天?
include<stdio.h> \/\/输入某年某月某日,判断这一天是这一年的第几天?int getDaysByMonth(int m,int d,char flag){ int c;if(flag=='r'){\/\/闰年 if(m==2){\/\/2月是29天 return(31+d);}else if(m>2){ c=0;m=m-1;for(;m>0;m--){ if(m==1||m==3||m==5||m==7...

C语言算某年某月某日是这年的第几天哪有问题
int main() { int i,year,month,day,sum;printf("请输入年月日:");scanf("%d %d %d",&year,&month,&day);sum=day;for(i=1;i<month;i++) { switch(i) { case 1:case 3:case 5:case 7:case 8:case 10:case 12:sum+=31;break;case 4:case 6:case 9:case 11:sum+=30;b...

C语言编程问题:输入某年某月某日,判断这一天是一年的第几天,大神帮我...
给你提供一个你对照看——include "stdio.h"int main(int argc,char *argv[]){int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31},y,m,d;printf("Please enter y, m, d(int >0)...\\n");if(scanf("%d%d%d",&y,&m,&d)!=3 || y<1 || m<1 || m>12 || d<...

C语言编程:输入某年某月某日,判断这一天是这一年的第几天?
include <stdio.h> int getDaysByMonth(int m,int d,char flag){ int c;if(flag=='r'){\/\/闰年 if(m==2){\/\/2月是29天 return (31+d);}else if(m>2){ c=0;m=m-1;for(;m>0;m--){ if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){ c+=31;}else...

C语言编程:输入某年某月某日判断这一天是一年的第几天的程序是是什么...
printf("输入日期是对应年份的第%d天",days+1);}else{ printf("输入日期是对应年份的第%d天",days);} return 0;} \/\/循环实现 int getDays(int month,int day){ int NUMBER[12]={31,28,31,30,31,30,31,31,30,31,30,31};int result=day;if (month >12){ \/\/避免出现数组越界情况 ...

“输入某年某月某日,判断这一天是这一年的第几天”用c语言怎样编程
{ int day,month,year,sum,leap;printf("\\nplease input year,month,day\\n");scanf("%d,%d,%d",&year,&month,&day);switch(month)\/*先计算某月以前月份的总天数*\/ { case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;cas...

相似回答