[c] 공백이있는 왼쪽 패드 printf

printf를 사용할 때 왼쪽에 공백으로 문자열을 어떻게 채울 수 있습니까?

예를 들어 앞에 40 개의 공백이있는 “Hello”를 인쇄하고 싶습니다.

또한 인쇄하려는 문자열은 여러 줄로 구성됩니다. 각 줄을 별도로 인쇄해야합니까?

편집 : 명확하게 말하면 모든 줄 앞에 정확히 40 개의 공백이 인쇄되기를 원합니다.



답변

“Hello”라는 단어를 40 자 너비의 열에 인쇄하고 공백을 왼쪽에 채우려면 다음을 사용합니다.

char *ptr = "Hello";
printf("%40s\n", ptr);

그러면 35 개의 공백과 “Hello”라는 단어가 표시됩니다. 이것은 열의 너비를 알고 있지만 데이터가 변경 될 때 형식을 지정하는 방법입니다 (할 수있는 한 가지 방법입니다).

정확히 40 개의 공백을 원하고 일부 텍스트를 원하면 40 개의 공백을 상수에 저장하고 인쇄하십시오. 여러 줄을 인쇄해야하는 경우 printf위와 같은 여러 문을 사용 하거나 루프에서 수행하여 ptr매번 값을 변경합니다 .


답변

이 함수를 사용하여 출력을 들여 씁니다 (예 : 트리 구조 인쇄). 는 indent문자열 앞에 공간의 수입니다.

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}


답변

int space = 40;
printf("%*s", space, "Hello");

이 명령문은 40 자 행을 예약하고 행 끝에 문자열을 인쇄합니다 (총 행 길이가 40에서 일정하도록 추가 공백 제거). 다음과 같이 문자와 정수에 동일하게 사용할 수 있습니다.

printf("%*d", space, 10);
printf("%*c", space, 'x');

매개 변수를 사용하여 공백을 결정하는이 방법은 가변 개수의 공백이 필요한 경우 유용합니다. 이러한 명령문은 다음과 같이 정수 리터럴에서 계속 작동합니다.

printf("%*d", 10, 10);
printf("%*c", 20, 'x');
printf("%*s", 30, "Hello");

이것이 미래에 저 같은 사람에게 도움이되기를 바랍니다.


답변

문자열 앞에 정확히 40 개의 공백이 필요하면 다음을 수행해야합니다.

printf("                                        %s\n", myStr );

너무 더럽다면 할 수 있습니다 (하지만 40 개의 공백을 수동으로 입력하는 것보다 느립니다).
printf("%40s%s", "", myStr );

문자열이 40 열에 정렬되도록하려면 (즉, 가장 오른쪽 문자가 40 열에 있도록 최대 39 개의 공백이 있어야 함) 다음을 수행하십시오.
printf("%40s", myStr);

다음을 수행하여 문자열 뒤에 “최대”40 개의 공백을 넣을 수도 있습니다.
printf("%-40s", myStr);


답변