[英]Variable sized padding in printf
有沒有辦法在printf
具有可變大小的填充?
我有一個整數,它表示填充的大小:
void foo(int paddingSize) {
printf("%...MyText", paddingSize);
}
這應該打印出### MyText
,其中paddingSize應該確定“#”符號的數量。
是的,如果您在格式字符串中使用*
,它將從參數中獲取一個數字:
printf ("%0*d\n", 3, 5);
將打印“ 005”。
請記住,您只能使用空格或零填充。 如果您想使用其他東西,可以使用以下方法:
#include <stdio.h>
#include <string.h>
int main (void) {
char *s = "MyText";
unsigned int sz = 9;
char *pad = "########################################";
printf ("%.*s%s\n", (sz < strlen(s)) ? 0 : sz - strlen(s), pad, s);
}
這個輸出###MyText
當sz
為9,或MyText
當sz
是2(無填充,但沒有截斷)。 您可能需要添加一個檢查pad
是否太短的選項。
但是請小心-至少某些編譯器(這可能是通用的C語言)不會總是做您想要的事情:
char *s = "four";
printf("%*.s\n", 5, s); // Note the "."
打印5個空格;
char *s = "four";
printf("%*s\n", 3, s); // Note no "."
這將打印所有四個字符“四個”
您可以這樣寫:
void foo(int paddingSize) {
printf ("%*s",paddingSize,"MyText");
}
printf( "%.*s", paddingSize, string );
例如:
const char *string = "12345678901234567890";
printf( "5:%.*s\n", 5, string );
printf( "8:%.*s\n", 8, string );
printf( "25:%.*s\n", 25, string );
顯示:
5:12345
8:12345678
25:12345678901234567890
最好使用std :: cout
using namespace std;
cout << setw(9) //set output width
<< setfill('#') // set fill character
<< setiosflags(ios_base::right) //put padding to the left
<< "MyText";
應該產生:
###MyText
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.