2013-10-08 32 views
2

我正在開發一個C項目,現在正在使用開源方法集成到我的代碼中。雖然經歷了代碼,我碰到一個的printf說法就是這個樣子的了:「%-9s」是做什麼的?

printf("%-9s",someString); 

我理解的格式說明符%S但什麼是%787-9

我試着尋找解決方案,但沒有成功。任何幫助都會有用。

+3

你有沒有嘗試?觀察行爲。 –

+1

@GrijeshChauhan:試驗告訴你在某些情況下會發生什麼。它不能證明規則。確定什麼意思是讀取適用文檔的適當方式。 –

+0

@EricPostpischil我相信通過實踐學習一些代碼是非常有幫助和容易的。但是,我同意語言標準/文檔可以說明確切的行爲。 –

回答

9
printf("%-9s",someString); 

9是字段寬度。如果您將字符串傳遞爲Hi,則將打印Hi和七個空格。

如果您將字符串傳遞爲Hai,則會打印Hai和六個空格。

-說左對齊。

編輯

代碼的這些行解釋多一點。

printf("\n%-9s%s", "Hello", "World!"); // left align, Here "Hello" is five characters, because of width -9, prints 4 more spaces after Hello 

printf("\n%9s%s", "Hello", "World!"); // right align, because of width 9, prints 4 more spaces before Hello 
printf("\n%+9s%s", "Hello", "World!"); // right align, because of width 9, prints 4 more spaces before Hello. 

用於"Hello"串只不是"World!"字符串這個正常打印所有上述情況下,字段寬度。

輸出

Hello World! 
    HelloWorld! 
    HelloWorld! 
+1

http://en.wikipedia.org/wiki/Printf_format_string#Format_placeholders –

+0

嗨Gangadhar,我按照你的步驟,並得到了結果,但當我用** printf(「% - 9s%s」,「我的」,「你好「); **,它給出了輸出** 7spaces + My Hello **。它將空格放在字符串的左側。這樣對嗎? –

+1

@CodingPassionate:我測試了'printf(「% - 9s%s」,「我的」,「你好」);'用蘋果鏗鏘5.0,並打印出「我的[七個空格]你好」。如果你的C實現產生了「[七個空格]我的你好」,那麼它被打破了。你確定代碼產生了這個輸出嗎? –

0

-登錄用於左對齊指定字段內輸出的格式說明符。
%-9s,9是字段寬度和-它告訴編譯器左對齊輸出。

0

%9s這意味着,如果你的字符串來顯示的長度小於9則顯示字符串並以空格填充它,直到長度達到9個charachters

+0

這並不能解釋'-'。 –

+0

@EricPostpischil我回答了他的問題:「我理解格式說明符%s,但%9s是什麼?」 – MOHAMED

+0

接受投票的答案在標題中回答了問題並解釋了整個說明符。對於忽略'-'的解釋,這顯然是一個優越的答案。 –