gpt4 book ai didi

c - 通过函数求解经过的日期和天数

转载 作者:行者123 更新时间:2023-11-30 20:35:10 24 4
gpt4 key购买 nike

我的 C 编码越来越好,但我仍然不确定如何解决代码中的几个问题。教授希望我们编写一个代码,在其中输入日期 (mm/dd/yyyy) 并输出已经过去的天数。对于选择2,输入某一年的天数并吐出相应的日期。问题是(因为我们的教授喜欢惹我们生气)解决像 4/31/2001 这样的错误,其中四月没有 31 天,并在非闰年中输入 366 天。

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


int monthFun(int d, int y)
{
int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i;


if (leap(y))
days[1] = 29;

for (i = 0; ; i++)
if (d > days[i])
d = d - days[i];
else
return i + 1;
return i + 1;


}


int dateFun(int d, int y)
{
int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i, m;

if (leap(y))
days[1] = 29;
for (i = 0; i < m - 1; i++)
if (d > days[i]) {
d = d - days[i];
}
else {
d = d;
m = i;

}

return d;



}

int daysPast(int m, int d, int y)
{
int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i, past = 0;

if (leap(y))
days[1] = 29;

for (i = 0; i < m - 1; i++)
past = past + days[i];
return past + d;
}



int main()
{
int mm, dd, yy, choice;
char more;

do {
printf ("\n\t\tThis program will find days passed or date in the year");
printf ("\n\t\t\t\t1) Input date (mm/dd/yyyy) to find the days passed");
printf ("\n\t\t\t\t2) Input passed days to find date in the year");
printf ("\n\n\t\t\t\tYour choice (1/2): ");
scanf ("%d", &choice);

if (choice == 1) {
printf ("\n\t\tPlease input date (mm/dd/yyyy): ");
scanf ("%d/%d/%d", &mm, &dd, &yy);
printf ("\n\t\tThere are %d days passed in the year %d", daysPast(mm, dd, yy), yy);
}
else
if (choice == 2){
printf ("\n\t\tInput days: ");
scanf ("%d", &dd);
printf ("\n\t\tInput year: ");
scanf ("%d", &yy);
printf ("\n\t\tThe date is %d/%d/%d", monthFun(dd, yy), dateFun(dd,yy), yy);

}

else
printf ("\n\t\tPlease choose 1 or 2");
printf ("\n\n\t\tDo more (Y/N)? ");
scanf ("%s", &more);
} while (more == 'y' || more == 'Y');
}

我的 dateFun() 代码有点草率(或者至少对我来说是这样)。我认为,如果输入上述问题之一,程序会说“无效输入”之类的内容,然后让您返回“执行更多操作”。如有任何提示,我们将不胜感激,并提前致谢!

最佳答案

您的 dateFun 测试未初始化的 m。

dateFun() 和 MonthFun() 看起来非常相似,我添加了一个示例组合版本。

int leap(int x)
{
return ((x % 4 == 0 && x % 100 != 0)|| x % 400 == 0);
}


int monthFun(int d, int y)
{
int i, days[] = {31,28,31,30,31,30,31,31,30,31,30,31};

days[1] += leap(y);

for (i=0 ; d>days[i] ; i++)
d -= days[i];
return i+1;
}


int dateFun(int d, int y)
{
int i, days[] = {31,28,31,30,31,30,31,31,30,31,30,31};

days[1] += leap(y);

for (i=0 ; d>days[i] ; i++)
d -= days[i];
return d;
}

int datemonthFun(int d, int y)
{
int i, days[] = {31,28,31,30,31,30,31,31,30,31,30,31};

days[1] += leap(y);

for (i=0 ; d>days[i] ; i++)
d -= days[i];
return (i+1)*100+d;
}

关于c - 通过函数求解经过的日期和天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com