这是一条计算天数的程序,我调试了几天都不能弄出来,请哪位高手帮忙改一下啊!
#include"stdlib.h"
#include"stdio.h"
struct dates
{
int year;
int month;
int day;
}date;
int days(int s,struct dates date)
{
int i;
static int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(date.year%4==0&&date.year%100!=0||date.year%400==0)
if(date.month==2&&date.day==29)
s=60;
if(date.day>=0&&date.day<=a[date.month]&&date.year>0)
{
if(date.month==1)
s=date.day;
else if(date.month>1&&date.month<=12)
{
for(i=0;i<date.month-1;i++)
s=s+a[i];
if(date.year%4==0&&date.year%100!=0||date.year%400==0)
if(date.month>2)
s++;
}
}
return s;
}
void main()
{ struct dates date;
int s=0;
printf("请输入年、月、日:");
scanf("%d%d%d",&date.year,&date.month,&date.day);
days(s,date);
if(s>0&&s<=366)
printf("今天是本年中的第%d天!",s);
else
printf("输入错误!");
}
我帮您改过的程序:
不过程序中没有做输入判错,您可以自己加上。
#include<stdio.h>
struct dates
{
int year;
int month;
int day;
};
int days(struct dates date)
{
int i, s = 0;
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
if (((date.year % 4 == 0) && (date.year % 100 != 0)) || (date.year % 400 == 0))
a[1] = 29;
for (i = 0; i < date.month - 1; i++)
s += a[i];
s += date.day;
return s;
}
int main()
{
struct dates date;
int s=0;
printf("请输入年、月、日:");
scanf("%d%d%d",&date.year,&date.month,&date.day);
s = days(date);
if(s>0&&s<=366)
printf("今天是本年中的第%d天!",s);
else
printf("输入错误!");
return 0;
}
你为什么不用类啊
我们老师讲过类似的,有时间的话, 以后我会把那代码送给你的
把s 定义为全局变量: extern int s = 0;
或者如上所说;
因为s 在days()函数中是局部变量,所以它在days()结束时将被系统释放其内存,所以不能传回值;
这书上都有的
你认真看看书,体会一下把
int days(int &s,struct dates date)
并把s改为全局变量就在c++中就可以了
支持
合法,因为*(p+j)就是p[j].
指针是个比较复杂的东西,开始时你可以把它当作可变长数组来用,或用来作为参数传递。时间长了了解了其中的机理后就可以用更灵活的用法了。