Turbo C++ 中的日期结构

date structure in turbo c++

我被要求在库函数getdate的帮助下编写一个程序来显示系统的当前日期,getdate用系统的当前日期填充日期结构*datep。 Turbo c++中预定义的日期结构如下图

struct date {
int da_year;    /*current year */
char da_day;    /* day of the month */
char da_mon;    /* month (1=Jan) */
};

函数 getdate 在头文件 DOS.H 中有如下声明。

void gatdate(struct date *datep);

由于getdate在日期结构体*datep中填入系统当前日期,我需要做一个struct date类型的结构体变量,调用getdate函数,将变量地址作为实参传给getdate ,此后显示这个结构变量的值应该给我们系统的当前日期。 结构日期有字符变量da_day作为它的成员之一来存储系统当前日期的日期。

Here my question is how is it possible to store days(from 1-28/29/30/31 usually) of the month in a character variable?

一个char变量,有符号或无符号,都可以很容易地保存一个"value",范围在031(十进制值,迂腐)之间,是用作日期.

Also,printing the value of the structure variable the way below doesn't gives system's current date correctly.

是的,因为您没有打印 decimal 值,您正在尝试打印不期望的相应字符表示。我们只对那里的十进制值感兴趣,因此 %d 将是预期的转换说明符。


详细说明,对于像 printf() 这样的可变参数函数,提供的参数经过 默认参数提升 注意 ,这使得提供 char 以提升为 int,这非常适合 %d 转换说明符。

也相关,引用 C11,章节 §7.21.6.1,

d,i

The int argument is converted to signed decimal in the style [−]dddd. [....]

c

If no l length modifier is present, the int argument is converted to an unsigned char, and the resulting character is written. [....]


注:

引用 C11,章节 §6.5.2.2

[....] The ellipsis notation in a function prototype declarator causes argument type conversion to stop after the last declared parameter. The default argument promotions are performed on trailing arguments.