2008-11-16 4 views
76

printf를 사용할 때 왼쪽에 공백이있는 문자열을 어떻게 덧씌울 수 있습니까?공백이있는 왼쪽 패드 printf

예를 들어, "Hello"를 앞에 40 칸씩 인쇄하고 싶습니다.

또한 인쇄 할 문자열은 여러 줄로 구성됩니다. 각 줄을 따로 인쇄해야합니까?

편집 : 그냥 분명히하기 위해 모든 줄 앞에 정확하게 40 칸씩 인쇄하고 싶습니다.

답변

81

너비가 40 자이고 왼쪽에 공백이있는 열에 "Hello"라는 단어를 인쇄하려면 다음을 사용하십시오.

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

이렇게하면 35 개의 공백이 표시되고 "안녕하세요"라는 단어가 표시됩니다. 이것은 열을 얼마나 많이 원하는지 알 때 데이터를 형식화하는 방법이지만 데이터가 변경됩니다 (글쎄, 하나는 할 수 있습니다).

정확히 40 개의 공백과 몇 개의 텍스트를 원한다면 40 개의 공백을 상수에 저장하고 인쇄하십시오. 여러 행을 인쇄해야하는 경우 위의 것과 같이 여러 개의 printf 문을 사용하거나 반복 할 때마다 ptr의 값을 변경하십시오. 당신이 40 대 문자열 전에 정확히하려면

+3

서식 플래그가 너무 많습니다. 하지만 나는 printf ("% 40s % s \ n", "", ptr); 그것을 40 칸도 채우는 데 사용할 수 있습니까? –

+0

예, 포인터의 내용 앞에 항상 40 칸이 생깁니다. 좋은 해결책이긴하지만, 만약 당신이 그것을 많이해야만한다면 나는 40 칸의 상수가 더 빠를 것이라고 생각합니다.나는 컴파일러가 printf 형식을 최적화 할 수 있는지 여부를 모른다. –

+2

@Bill : 컴파일러가 printf() 형식을 최적화 할 수 없습니다. –

13

은 당신은 다만해야

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

가 너무 더러 우면 당신이 할 수있는 (그러나 수동으로 40 대를 입력하는 것보다 느립니다) : printf("%40s", myStr);

012 : 당신이 문자열 컬럼 (40)에서 줄을 받으려면 printf("%40s%s", "", myStr);

는이 작업을 수행 (즉,이 같은 권리 대부분의 캐릭터가 열 (40)에 있음을 진행하기까지 39 개 공간에있다)또한 다음과 같이하면 최대 40 개의 공백을 넣을 수 있습니다. printf("%-40s", myStr);

+0

공백 문자 다음에 오는 공백 문자 – oneat

49

이 기능을 사용하여 출력 내용을 들여 쓰거나 (예 : 트리 구조 인쇄)이 기능을 사용합니다. indent은 문자열 앞의 공백 수입니다.

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

문자열의 리터럴 연결을 사용하여 나머지 printf 형식과 들여 쓰기를 구분하는 것을 좋아합니다. 한 가지 제안 : 들여 쓰기 문자열에 단일 공백 ​​대신 빈 문자열을 사용하십시오. 그런 식으로 들여 쓰기 == 0 예상대로 작동합니다. (즉,'printf (..., indent, ", ...)) –

+0

이것은 정확하게 쓰려고하는 함수입니다! – Elemental

+0

Ray Hulha는 "컴파일러 문제"를 수정하기 위해 문자열 리터럴 연결을 제거했습니다. – mwfearnley

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

이 문은 열의 끝 (안 열 후, 아직 40이 될 것이다 사용 된 컬럼의 마지막 columns.Total 번호)에서 40 개 문자의 열, 인쇄 문자열을 예약합니다. 이하 같다 는 숫자 및 정수 사용될 수

printf("%*d",space,10); 
printf("%*c",space,''); 
공간 가변 개수

다음과 같이 required.These 문은 여전히 ​​상수 정수로 작동 여기서 변수 공간을 이용하는이 방법은 기능에 유용

통화

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

희망은 앞으로 나 같은 사람을 도울 수 있기를 바랍니다.