gpt4 book ai didi

c++ - Turbo C++ 中的日期结构

转载 作者:行者123 更新时间:2023-11-28 01:49:31 24 4
gpt4 key购买 nike

我被要求在库函数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,之后显示这个结构变量的值应该给我们系统的当前日期。date 结构体的成员之一是字符变量 da_day,用于存储系统当前日期的日期。

  • 我的问题是如何存储天数(从 字符变量中月份的 1-28/29/30/31 通常)?

  • 另外,按照下面的方式打印结构变量的值
    没有正确给出系统的当前日期。

    printf("year/day/month is %d/%c/%c",a.da_year,da_day,da_mon);    /*    a is the structure variable of the type struct date    */

    虽然下面的陈述给出了正确的日期。

    printf("year/day/month is %d/%d/%d",a.da_year,da_day,da_mon);

    为什么会这样?

最佳答案

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 变量,有符号或无符号,可以很容易地保存一个介于 031 之间的“值”(十进制值,是迂腐),用作日期

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

是的,因为您没有打印十进制 值,所以您正在尝试打印不期望的相应字符表示。我们只对那里的十进制值感兴趣,因此 %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.

关于c++ - Turbo C++ 中的日期结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43556408/

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