programing

printf의 가변 크기 패딩

yellowcard 2023. 9. 17. 12:14
반응형

printf의 가변 크기 패딩

다양한 크기의 패딩을 사용할 수 있는 방법이 있습니까?printf?

패딩의 크기를 나타내는 정수가 있습니다.

void foo(int paddingSize) {
    printf("%...MyText", paddingSize);
}

이것은 출력될 것입니다.### MyText여기서 paddingSize는 '#' 기호의 수를 결정해야 합니다.

예, 사용하시면*형식 문자열에서 인수로부터 번호를 가져옵니다.

printf ("%0*d\n", 3, 5);

"005"를 인쇄합니다.

공백이나 0으로만 패드를 넣을 수 있습니다.다른 것으로 패드를 고정하려면 다음과 같은 것을 사용할 수 있습니다.

#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언제sz9, 또는MyText언제sz2입니다(패딩은 없지만 잘림은 없음).다음 항목에 대한 검사를 추가할 수 있습니다.pad너무 짧습니다.

다음과 같이 쓸 수 있습니다.

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

그러나 주의하십시오. 적어도 일부 컴파일러는(이는 일반적인 C 작업일 수도 있음) 항상 원하는 작업을 수행하지는 않습니다.

char *s = "four";
printf("%*.s\n", 5, s); // Note the "."

이것은 5칸을 인쇄합니다.

char *s = "four";
printf("%*s\n", 3, s);  // Note no "."

네 개의 문자를 모두 "4"로 인쇄합니다.

better use std::better

#include<iomanip>
#include<iostream>
using namespace std;
cout << setw(9)                       //set output width
     << setfill('#')                  // set fill character
     << setiosflags(ios_base::right)  //put padding to the left
     << "MyText";

다음을 산출해야 합니다.

###MyText

언급URL : https://stackoverflow.com/questions/4133318/variable-sized-padding-in-printf

반응형