2013-07-10 117 views
4

所以我有一個長度爲10的字符串。我想打印來自4-6 [包括兩個]的字母,我想跨越特定長度L的輸出,數字是放置在右側。打印C格式的字符串

對於例如

如果我有原始字符串123456789,然後將下面的代碼應在隨後的方式來顯示。

printf(Original); 
printf(from 4-6, over 5 spaces) 

輸出:

123456789 
    456 

即456分佈在5個空格和縮進的權利。

如何在C中執行此操作?

編輯1:如果我的寬度不是恆定的,並且我有一個變量,指示寬度。類似的,子字符串的長度是一個變量。現在有什麼辦法呢?

我可以這樣做

printf("%%d.%ds",width,precision,expression); 
+0

將整數分成特定的數組,然後打印您喜歡的數組索引。 – Ishmeet

回答

7

很直接:

printf("%5.3s\n", Original + 4); 
     ^^ 
     | | 
     | +--- precision, causes only 3 characters to be printed 
     | 
     +----- field width, sets total width of printed item 

由於右調整是默認的,你得到所需的輸出。

精度「節省」我們不必將三個字符提取到正確終止的字符串中,非常方便。

可以通過指定的寬度爲*和傳遞一個int參數中使用動態值要麼精度或場寬度(或兩者,當然):

const int width = 5, precision = 3; 
printf("%*.*s\n", width, precision, Original + 4); 
+0

感謝你的說,例如我的領域的寬度不是恆定的,我可以合併的任何方式?這是如果我有'寬度'變量,這告訴我的整體寬度。 – Kraken

+0

添加到編輯中。 – Kraken

+0

@Kraken更新了答案。 – unwind

5
#include <stdio.h> 

int main(void) 
{ 
    char *original = "123456789"; 

    printf("%5.3s\n", original + 3); 
    return 0; 
} 

編輯:

如果您想要基於變量的精度:

int prec = 2; 

printf("%5.*s\n", prec, original + 3); 

...寬度相同

+0

我想原來加3會從4開始,這是什麼讓它停在6? – Kraken

+1

3%%5.3s是精度(最大字符要打印) –

+0

@DavidRF編輯問題,如果你可以添加到答案? – Kraken