2011-11-13 50 views
4

printf("%d",printf("%*s%*s",6,"",6))%* s格式Ç

結果添加2個數字(6 + 6)的,有沒有人對這種類型的格式說明

+0

您正在尋找的術語是「嵌套的」。如果你谷歌「嵌套printf」,你會發現很多信息..因爲你沒有提出一個明確的問題,所以很難回答。 – Niclas

+0

@Niclas:謝謝.. – Akash

回答

8

您的示例格式錯誤,「嵌套」printf缺少參數。

如果你寫這樣的:

printf("%d",printf("%*s%*s",6,"",6, "")); 

如果變成一種確定。 *表示必須從printf的下一個參數中讀取精度字段。因此,在這種情況下,所述「嵌套」 printf打印至多長度的兩個字符串6.

printf由於返回寫入的字符數,內printf返回12,其中外printf打印。從人頁的相關部分

引用:

精度

可選的精度,在後跟一個可選的十進制數字字符串的期間(「」)的形式。 而不是一個十進制數字字符串可以寫「*」或「* m $」(對於某些十進​​制整數m)來指定 精度分別在下一個參數或第m個參數中給出,其中必須有 爲int類型。如果精度僅爲'。',或者精度爲負值,則精度爲 爲零。這給出了d,i,o,u,x和X轉換中出現的最小數字位數,a,e,E,f和F組合的基數字符後出現的位數 版本,g和G轉換的有效數字的最大數目或字符的最大數目 要從s和S轉換的字符串打印。

我不知道怎麼便攜本的,但我敢肯定的是,有更好的方法將兩個數字相加

+0

感謝您的幫助 – Akash

-1

printf返回打印的字符的數目。其餘的應該是顯而易見的。

+1

-1,我們知道你是最權威的天才,但你應該認識到,並不是每個人都像你一樣聰明。 – BlackBear

+0

對不起,我很匆忙。我希望這是作者需要了解「12」來自哪裏的所有內容。不過現在我不打算改進我的答案,因爲其他人已經做得很好。 –

1

作爲寬度說明符的A *表示寬度作爲參數傳入。

printf("%*s%*s", 6, "", 6, ""); 

等同於:

printf("%6s%6s", "", ""); 

這將打印出12位。

printf由於返回打印的字符的數目,它會返回12.

原始代碼中缺少最後的「」參數。如果它有效,那純粹是偶然的。