我有一个8位int
来存储日期。例如,12041989
是1989年4月12日。我应该在什么类型的变量中声明日期以及如何提取年份?
编辑:根据你所说的,我是这样做的:(我必须通过输入当前日期和出生日期来计算一个人的年龄)
#include <stdio.h>
#include <conio.h>
void main()
{
unsigned int a, b, ac, an, c;
printf("\n Current date zzllaaaa \n");
scanf("%d", &a);
printf("\n Date of birth zzllaaaa \n");
scanf("%d", &b);
ac = a % 10000;
an = b % 10000;
c = ac - an;
printf("\n Age is: %d", c);
getch();
}
有时候它会起作用,但有时却没有,我无法理解为什么。例如,对于13102013
和12061995
,它告诉我年龄为-3022
。那是为什么?
答案 0 :(得分:3)
如果您不关心年份的5位或更多位数的日期,您可以使用模数运算符:
int date = 12041989;
int year = date % 10000;
在大多数机器上,类型int
通常为32位宽。这足以将格式“ddmmyyyy”的日期存储在一个数字中。我不鼓励你使用unsigned int
,因为两个日期的差异可能是故意的(例如,如果你不小心将出生日期放在首位,当前日期为第二,你会得到一个负面的年龄,并且你在输入中检测到错误)。
#include <stdio.h>
#include <conio.h>
int main() // better use int main(), as void main is only a special thing not supported by all compilers.
{
int a, b, ac, an, c; // drop the "unsigned" here.
printf("\n Current date zzllaaaa \n");
scanf("%d", &a);
printf("\n Date of birth zzllaaaa \n");
scanf("%d", &b);
ac = a % 10000;
an = b % 10000;
c = ac - an;
if ( c < 0 )
{
printf("You were born in the future, that seems unlikely. Did you swap the input?\n");
}
printf("\n Age is: %d", c);
getch();
}
答案 1 :(得分:3)
使用模运算符(%
)从数字中提取数字。
int date = 12041989;
int day,month,year;
year = date%10000;
date = date/10000;
month = date/100;
date = date/100;
day = date;