gpt4 book ai didi

c++ - 使用预处理器定义的日期格式

转载 作者:行者123 更新时间:2023-11-28 05:56:19 24 4
gpt4 key购买 nike

我想使用预处理器代码在小于 10 的数字之前打印一个带有“0”的日期。例如,如果我有数字 11,1,2015,则输出应为 11 01 2015

我有这个预处理器:

 #define getDateFromVar(n) \
( (var##n<10) ? ('0' << var##n) : (var##n ) )

我的 C++ 代码是这样的:

int var1 = 11, var2 = 1, var3 = 2015;
cout << "The date is: " << getDateFromVar(1)
<< " " << getDateFromVar(2)
<< " " << getDateFromVar(3) << endl;

输出是:11 96 2015。 96 等于 48 左移 1。在此序列 ('0' << var##n) 中,<< 不被视为 cout 流。

最佳答案

发生这种情况是因为 ('0' << var##n)首先被评估,被括号包围,只有它的结果被传递给 cout .

您可以通过更改为以下内容来规避这种情况:

#define getDateFromVar(n) \
((var##n<10) ? "0" : "") << (var##n)
// "0" if var < 10, otherwise empty string, followed by var

但作为一般规则,不推荐使用宏。根据具体情况,它可能会使代码更难阅读/理解,并可能导致难以发现错误。

作为替代方案,代码可以更改为:

#include <iomanip>

cout << "The date is: " << setfill('0')
<< setw(2) << var1 << " "
<< setw(2) << var2 << " "
<< setw(4) << var3 << endl;

关于c++ - 使用预处理器定义的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34099328/

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