标题:计算出生至今共度过多少天。
只看楼主
xwjzm2002
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-8-5
 问题点数:0 回复次数:10 
计算出生至今共度过多少天。

#include "stdio.h"
main()
{
int year,month,day,nyear,nmonth,nday;
int days,dayn1=0,dayn2,iyear,dayyear;
int i;
int monthtable[]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("birthday=");
scanf("d% d% d%",&year,&month,&day);
if(year<=0||month<1||month>12||day<=0||day>31)
printf("data error\n");
printf("year,month,day is");
scanf("d% d% d%",&nyear,&nmonth,&nday);
if(nyear<=0||nmonth<1||nmonth>12||nday<=0||nday>31)
printf("data error");
iyear=year;
for(;iyear<=nyear-1;iyear++)
{if((iyear%4==0&&iyear%100!=0)||iyear%400==0)
dayyear=366;
else
dayyear=365;
dayn1=dayn1+dayyear;
}
if((nyear%4==0&&nyear%100!=0)||nyear%400==0)
monthtable[1]=29;

dayn2=nday;
for(i=1;i<nmonth;i++)
{dayn2=dayn2+monthtable[i-1];
days=dayn1+dayn2;
}
printf("days isd%",days);
getch();
}
上面是小妹写的程序,但是在WIN-TC上能编译,但是只要运行第一个输入后,不经过运算,原样输出printf后的语句(不计算),不知怎搞的,望指教,么么。。

搜索更多相关主题的帖子: month int day 
2007-08-09 16:49
liulanghan
Rank: 1
等 级:禁止访问
帖 子:104
专家分:0
注 册:2007-5-5
得分:0 

楼主的程序还没写完呢!~
#include "stdio.h"
main()
{
int year,month,day,nyear,nmonth,nday;
int days,dayn1=0,dayn2,iyear,dayyear;
int i;
int monthtable[]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("birthday=year/month/day");
scanf("%d/%d/%d",&year,&month,&day); /*输入格式错误*/
if(year<=0||month<1||month>12||day<=0||day>31)
printf("data error\n");
printf("year/month/day is");
scanf("%d/%d/%d",&nyear,&nmonth,&nday); /*同上,输入格式错误*/
if(nyear<=0||nmonth<1||nmonth>12||nday<=0||nday>31)
printf("data error\n");
iyear=year;
for(;iyear<=nyear-1;iyear++)
{
if((iyear%4==0&&iyear%100!=0)||iyear%400==0)
dayyear=366;
else
dayyear=365;
dayn1=dayn1+dayyear;
}
if((nyear%4==0&&nyear%100!=0)||nyear%400==0)
monthtable[1]=29;
dayn2=nday;
for(i=1;i<nmonth;i++)
{
dayn2=dayn2+monthtable[i-1];
/* days=dayn1+dayn2; days为什么循环啊?*/
}
days=dayn1+dayn2;
printf("days is%d",days); /*输出格式错误*/
}

你的程序改了下,没写完的部分自己去补!~

2007-08-09 17:15
leeldy
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-8-2
得分:0 
回复:(xwjzm2002)计算出生至今共度过多少天。

我实在找不出错在什么地方了,得出的总是负数~~~~

#include <stdio.h>
main()
{
long year,month,day,nyear,nmonth,nday;
long days=0,iyear,imonth,iday;
int i;
int monthtable[]={31,28,31,30,31,30,31,31,30,31,30,31};

printf("Begin:year month day="); /*输入起始日期*/
scanf("d% d% d%\n",&year,&month,&day);

if((year<=0)&&(month<1)&&(month>12)&&(day<=0)&&(day>31)) /*判断输入是否正确*/
{
printf("data error\n");
exit(1); /*输入错误数据退出*/
}
printf(" END :year month day="); /*输入中止日期*/
scanf("%d %d %d\n",&nyear,&nmonth,&nday);

if((nyear<=0)&&(nmonth<1)&&(nmonth>12)&&(nday<=0)&&(nday>31)) /*判断*/
{
printf("data error");
exit(1);
}

iyear=year; /*从起始年到中止年间天数*/
for(;iyear<nyear;iyear++)
{
if((iyear%4==0)&&(iyear%100!=0)||(iyear%400==0))
days+=366; /*闰年*/
else
days+=356;
}

imonth=month;
if(((year%4==0)&&(year%100!=0))||(year%400==0)) /*加入从起始日期的下个月到年终天数*/
monthtable[1]=29;
for(++imonth;imonth<=12;imonth++)
days+=monthtable[imonth-1];

iday=day; /*为美观规范设立iday*/
days+=monthtable[month-1]-iday; /*加入起始日期当月剩余天数*/

if(((nyear%4==0)&&(nyear%100!=0))||(nyear%400==0)) /*判断中止日期当年是否为闰年*/
monthtable[1]=29;

for(i=1;i<nmonth;i++) /*加入终止日期当年到终止日期月份的天数*/
days+=monthtable[i-1];

days+=nday; /*加入终止日期当月天数*/

printf("days is=%d",days);

getch();
}

/*很多%d都写成了d%*/

调试结果竟然是这样的,错在哪里???


↑↑↑↑↑↑↑↑如果我错了,请改正我的错误↑↑↑↑↑↑↑↑

2007-08-09 17:59
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
得分:0 

当前日期可以通过函数调用得到。
struct date date1;
getdate(&date1); /*dos.h中*/

备注:
date的成员为:
struct date {
int da_year;
char da_day; /* Day of the month */
char da_mon; /* Month (1 = Jan) */
};


2007-08-09 18:06
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
得分:0 
以下是引用liulanghan在2007-8-9 17:15:11的发言:

楼主的程序还没写完呢!~
#include "stdio.h"
main()
{
int year,month,day,nyear,nmonth,nday;
int days,dayn1=0,dayn2,iyear,dayyear;
int i;
int monthtable[]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("birthday=year/month/day"); 你吓我吧,难道
scanf("%d/%d/%d",&year,&month,&day); /*输入格式错误*/----------你的输入有什么不同吗??
if(year<=0||month<1||month>12||day<=0||day>31) 其实搂主的输入没有任何问题
printf("data error\n"); 当然你的也没有问题,就是不能说
printf("year/month/day is"); 别人错!!

scanf("%d/%d/%d",&nyear,&nmonth,&nday); /*同上,输入格式错误*/------同上!!
if(nyear<=0||nmonth<1||nmonth>12||nday<=0||nday>31)
printf("data error\n");
iyear=year;
for(;iyear<=nyear-1;iyear++)
{
if((iyear%4==0&&iyear%100!=0)||iyear%400==0)
dayyear=366;
else
dayyear=365;
dayn1=dayn1+dayyear;
}
if((nyear%4==0&&nyear%100!=0)||nyear%400==0)
monthtable[1]=29;
dayn2=nday;
for(i=1;i<nmonth;i++)
{
dayn2=dayn2+monthtable[i-1];
/* days=dayn1+dayn2; days为什么循环啊?*/
}
days=dayn1+dayn2;
printf("days is%d",days); /*输出格式错误*/--------有错误吗??没有!!你又错了!!

你的程序改了下,没写完的部分自己去补!~

至于算法嘛??乱七八糟!!


要练习算法就来http:///!!有挑战哦!!
2007-08-09 18:23
liulanghan
Rank: 1
等 级:禁止访问
帖 子:104
专家分:0
注 册:2007-5-5
得分:0 
楼上的你看清楚楼主的输入输出再说话好不好啊 ,!~
2007-08-09 18:29
leeldy
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-8-2
得分:0 
谁帮我解决问题?为什么输出是负数???

↑↑↑↑↑↑↑↑如果我错了,请改正我的错误↑↑↑↑↑↑↑↑

2007-08-09 18:30
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
得分:0 
恩!!%d反了!!对不起!!错了!!

要练习算法就来http:///!!有挑战哦!!
2007-08-09 18:31
liulanghan
Rank: 1
等 级:禁止访问
帖 子:104
专家分:0
注 册:2007-5-5
得分:0 
我帮你改后你的程序可以运行,但输出天数多算了 ,记得输入的时候要年/月/日 ,其中/不能少
但是不是正确的结果 ,因为我只是改了楼主的错误,但算法没改,按楼主的算法天数会算多的
 自己想想,再补上.
2007-08-09 18:53
qq2363031
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-1-30
得分:0 

只考虑到当前的年月日都大于出生的年月日 没有考虑到当前的年份大于出生年份时 当前的月日小于出生的月日

2007-08-10 16:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-161529-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.182761 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved