如何计算从 C 中出生年份开始到该人的出生日期有多少天?



这就是我获得的金额

int myd;
int mym;
int myy;
printf("Enter your day of birth:");
scanf("%d", &myd);
printf("Enter your month of birth:");
scanf("%d", &mym);
printf("Enter your year of birth:");
scanf("%d", &myy);
int month;
if (mym == 1 || mym == 3 || mym == 5 || mym == 7 || mym == 8 || mym == 10 || mym == 12)
{month = 31;}
else if (mym == 4 || mym == 6 || mym == 9 || mym == 11)
{month = 30;}
else if (mym == 2 && myy %4 !=0 && myy %100 ==0)
{month = 28;}
else if (mym == 2 && myy %4 ==0 && myy %100 !=0)
{month = 29;}

我不知道如何增加出生月份前几个月的天数。如果我知道的话,也许我可以加上增量+出生日期=从他们出生年份开始到生日的天数

您需要一个数组,该数组包含每个月的天数。第二个元素旁边的每个元素都有一个文字值,3031:

int days_in_month[] = { 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

对于代表二月的第二个元素,您需要根据年份计算天数。你已经有了,但这是不正确的。例如,这种情况:

... && myy % 4 != 0 && myy % 100 == 0)

永远不会是真的。即使在更换操作员后:

... && (myy % 4 != 0 || myy % 100 == 0))

它仍然不正确,因为它将匹配可被400整除的年份,即闰年。正确的条件是:

(myy % 4 != 0 || myy % 100 == 0) && myy % 400 != 0

或闰年(基本上是对上述内容的否定(:

(myy % 4 == 0 && myy % 100 != 0) || myy % 400 == 0

这样,剩下的只是days_in_month的一个循环,将生日前几个月的天数相加,最后再加上生日的月份。你可以在godbolt中看到代码。一些例子的输出:

]$ echo -en "1n3n1900n" | ./a.out
Enter your day of birth:Enter your month of birth:Enter your year of birth:
01-03-1900: 60
]$ echo -en "1n3n1996n" | ./a.out
Enter your day of birth:Enter your month of birth:Enter your year of birth:
01-03-1996: 61
]$ echo -en "1n3n1997n" | ./a.out
Enter your day of birth:Enter your month of birth:Enter your year of birth:
01-03-1997: 60
]$ echo -en "1n3n2000n" | ./a.out
Enter your day of birth:Enter your month of birth:Enter your year of birth:
01-03-2000: 61

最后一点,可以说一年从1月1日开始,所以从年初到1月1号有0天:-(如果是这样,只需从最终结果中减去1

编辑还有一件事,在进行任何计算之前,首先验证用户输入。特别是月份在1和12之间(包括1和12(,否则您将开始读取经过days_of_month数组的垃圾。

您可以使用以下代码:

int mym;
int answer[] = {31,0,31,30,31,30,31,31,30,31,30,31};
printf("Enter your month of birth:");
scanf("%d", &mym);
if(mym==2){
if(myy %4 != 0 && myy %100 ==0){
answer[mym] = 28;
}
if(myy %4 ==0 && myy %100 !=0){
answer[mym]= 29;
}
}
else{
printf("%d",answer[mym]);
}

为了方便起见,我认为您应该使用数组(类似于answer[](。

最新更新