我想使用预处理程序代码在小于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;putput是:11 96 2015。 96等于48左移1。在此序列('0' 最佳答案 发生这种情况的原因是,首先评估('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/
10-11 23:07