如何使用宏填充C中的数字?
我试图在sprintf语句中使用宏。是这样的:如何使用宏填充C中的数字?,c,C,我试图在sprintf语句中使用宏。是这样的: #define MACR 6 .... int Number= 5; char Formatted[30]; sprintf( Formatted, "%06d", Number ); 在这里,我想使用MACR而不是6。有人能帮我吗?使用*格式说明符将宽度作为参数传递。像这样的方法应该会奏效: sprintf( Formatted, "%0*d", MACR, Number ); 但请使用常量而不是宏 最简单的解决方案就是用 #define
#define MACR 6
....
int Number= 5;
char Formatted[30];
sprintf( Formatted, "%06d", Number );
在这里,我想使用MACR而不是6。有人能帮我吗?使用
*
格式说明符将宽度作为参数传递。像这样的方法应该会奏效:
sprintf( Formatted, "%0*d", MACR, Number );
但请使用常量而不是宏 最简单的解决方案就是用
#define MAKE_TEXT(x) #x
sprintf( Formatted, "%0"MAKE_TEXT(MACR)"d", Number );
a“*”
,并将宏作为参数传递:
sprintf( formatted, "%0*d", MACR, number );
或者,您可以连接字符串,例如:
sprintf( formatted, "%0" STRINGIZE(MACR) "d", number );
使用常用的STRINGIZE宏:
#define STRINGIZE_HELPER(x) # x
#define STIRNGIZE(x) STRINGIZE_HELPER(x)
(当然,最简单、最安全的解决方案就是忘记
sprintf
,使用std::ostringstream
)有两种方法可以解决这个问题:
#define MACR "%06d"
sprintf(Formatted, MACR, Number);
*
宽度说明符:
#define MACR 6
sprintf(Formatted, "%0*d", MACR, Number);
如果我想在运行时将其更改为用户确定的内容,会发生什么情况?虽然您可以这样做,
*
符号是一个更好的选择。@RichardJ.RossIII如何在运行时更改宏?@neagogegab我指的是根据用户输入更改填充,或者一些我可能不想成为宏的东西。@JonathanLeffler,是的,你可以这样做,但问题是关于使用宏。你丢失了原始格式的0
,没有使用
,这意味着0
是不必要的。