0

我有一个int存储日期的 8 位数字。例如120419891989 年 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();
}

有时它有效,但有时它不起作用,我不明白为什么。例如 for 1310201312061995它告诉我年龄是-3022。这是为什么?

4

2 回答 2

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();
}
于 2013-10-13T09:52:26.480 回答
3

使用模运算符 ( %) 从数字中提取数字。

int date = 12041989;
int day,month,year;

year = date%10000;
date = date/10000;
month = date/100;
date = date/100;
day  = date; 
于 2013-10-13T09:55:03.050 回答