簡體   English   中英

printf中可變大小的填充

[英]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);
}

這個輸出###MyTextsz為9,或MyTextsz是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM