2013-07-04 125 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)) –

相關問題