| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 508 人关注过本帖
标题:计算出生至今共度过多少天。
收藏  订阅  推荐  打印 
xwjzm2002
Rank: 1
等级:新手上路
帖子:3
积分:130
注册:2007-8-5
计算出生至今共度过多少天。

#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-8-9 16:49
liulanghan
Rank: 2
等级:注册会员
帖子:94
积分:1042
注册:2007-5-5

楼主的程序还没写完呢!~
#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-8-9 17:15
leeldy
Rank: 2
等级:注册会员
帖子:79
积分:888
注册:2007-8-2
回复:(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-8-9 17:59
cordier
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:410
积分:4236
注册:2006-2-9

当前日期可以通过函数调用得到。
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-8-9 18:06
viky2003
Rank: 3Rank: 3
等级:中级会员
帖子:235
积分:2452
注册:2007-4-11

以下是引用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://yzfy.org/!!有挑战哦!!
2007-8-9 18:23
liulanghan
Rank: 2
等级:注册会员
帖子:94
积分:1042
注册:2007-5-5

楼上的你看清楚楼主的输入输出再说话好不好啊 ,!~
2007-8-9 18:29
leeldy
Rank: 2
等级:注册会员
帖子:79
积分:888
注册:2007-8-2

谁帮我解决问题?为什么输出是负数???

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

2007-8-9 18:30
viky2003
Rank: 3Rank: 3
等级:中级会员
帖子:235
积分:2452
注册:2007-4-11

恩!!%d反了!!对不起!!错了!!

要练习算法就来http://yzfy.org/!!有挑战哦!!
2007-8-9 18:31
liulanghan
Rank: 2
等级:注册会员
帖子:94
积分:1042
注册:2007-5-5

我帮你改后你的程序可以运行,但输出天数多算了 ,记得输入的时候要年/月/日 ,其中/不能少
但是不是正确的结果 ,因为我只是改了楼主的错误,但算法没改,按楼主的算法天数会算多的
 自己想想,再补上.
2007-8-9 18:53
qq2363031
Rank: 1
等级:新手上路
帖子:3
积分:130
注册:2005-1-30

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

2007-8-10 16:35
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.061453 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved