2013-07-04 171 views
1

有没有在C的方式来传递printf()我们要为转换指定使用的参数?一个小例子:传递一个转换符作为参数传递给printf()

想象我打电话给我的方案与./foo [-x]

如果-x不存在,我希望它打印在十进制一定的价值。但是,如果-x存在,我希望它以十六进制打印该值。

有没有办法通过printf()我们想用作转换说明符的字符串作为参数,在这种情况下是"x""%s"

-

注意:它不是像

char *format = "%s"; 
printf(format, "a string"); 

,我要找的。

+0

如果你的目标是有东西相当于这个假设'的printf( “%8升@ \ n”,(xflag “X”: “d”),3141592L?);其中'@'用在这里'表明转换说明符被指定为单独的参数,那么答案是“否”。你不得不创造适当的格式字符串:'的printf((xflag“%.8lX”:“%.8ld”),3141592L?);',你的“它不是像”的评论表示您不希望但我在这里的评论说:“你必须这样做,或者使用你自己设计的东西,而不是'printf()'函数族”。 –

+0

@JonathanLeffler谢谢你的回复。我只是好奇,如果printf()有这种能力;) –

回答

1

虽然* printf()系列的功能并提供方法来传递字段宽度作为参数,实际的转换说明本身必须在格式字符串来提供。因此,如果你的程序需要printf("%#X", integer)printf("%d", integer)之间做出选择,你要么必须以编程方式生成的格式字符串(在相当类似于你明确你的问题的最后拒绝的方式什么的),或者你需要有两个不同的调用以printf()与条件代码来选择它们之间。另一方面,只要所有可能的不同输出格式使用相同数量的参数,以编程方式生成格式字符串似乎并不是非常繁重。

+0

谢谢你的回复。我只是好奇,如果printf()有这种能力;) –

+1

如果这个答案对您有用,请考虑接受它。 (参见[什么是这一切的“接受”呢?(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)) –

相关问题