Program Tip

출력에서 동일한 길이를 얻기 위해 printf ()를 사용하여 문자열을 포맷하는 방법은 무엇입니까?

programtip 2020. 10. 4. 13:11
반응형

출력에서 동일한 길이를 얻기 위해 printf ()를 사용하여 문자열을 포맷하는 방법은 무엇입니까?


I는 두 가지 기능 등을 생성 한 메시지가 Starting initialization...와 검사 코드 및 출력을 리턴하는 다른 "Ok", "Warning"또는 "Error". 그러나 생성되는 출력은 길이가 다릅니다.

Starting initialization...Ok.
Checking init scripts...Ok.

다음과 같은 것을 어떻게 얻을 수 있습니까?

Starting initialization...       Ok.
Checking init scripts...         Ok.

문자열 필드에 너비를 지정할 수 있습니다.

printf("%-20s", "initialization...");

그런 다음 해당 필드로 인쇄되는 모든 항목은 지정한 너비만큼 공백으로 채워집니다.

-해당 필드에 텍스트를 왼쪽에 맞.


printf너비 지정자를 사용하여 서식을 지정할 수 있습니다. 예 :


printf( "%-30s %s\n", "Starting initialization...", "Ok." );

기본값은 오른쪽 정렬을 사용하는 것이기 때문에 음의 너비 지정자를 사용하여 왼쪽 정렬을 나타냅니다.


또한를 유연하게 선택 width하려면 다음 두 가지 형식 (잘림 포함 또는 제외) 중 하나를 선택할 수 있습니다.

int width = 30;
//no truncation uses %-*s
printf( "%-*s %s\n", width, "Starting initialization...", "Ok." );
// output is "Starting initialization...     Ok."

//truncated to the specified width uses %-.*s
printf( "%-.*s %s\n", width, "Starting initialization...", "Ok." ); 
// output is "Starting initialization... Ok."

%n특정 상황에서 도움이 될 수 있는 수식어 있습니다. 지금까지 문자열이 있었던 열을 반환합니다. 예 : 표처럼 첫 번째 행의 너비 내에있는 여러 행을 작성하려고합니다.

int width1, width2;
int values[6][2];
printf("|%s%n|%s%n|\n", header1, &width1, header2, &width2);

for(i=0; i<6; i++)
   printf("|%*d|%*d|\n", width1, values[i][0], width2, values[i][1]);

어떤 길이 두 문자열의 동일한 폭의 2 열을 인쇄 할 header1header2있을 수 있습니다. 모든 구현에 %nSolaris와 Linux가 있는지는 모르겠습니다 .


메시지를 정렬하기 위해 손으로 공백을 추가하는 다소 낮은 기술 솔루션도 있습니다. 메시지 문자열에 몇 개의 후행 공백을 포함하는 것을 방해하는 것은 없습니다.


\ t 문자 수정자인 탭을 사용하여 시작하십시오 . 고정 된 위치 (열, 터미널 용어)로 진행됩니다. 그러나 열 너비보다 큰 차이가 있으면 도움이되지 않습니다 (올바르게 기억하면 4 자).

이 문제를 해결하려면 고정 된 수의 탭 (5? 6 ?, 시도)을 사용하여 "OK / NOK"항목을 작성한 다음 줄 바꿈 없이 리턴 ( \ r )하고 메시지를 작성하십시오.

참고 URL : https://stackoverflow.com/questions/1809399/how-to-format-strings-using-printf-to-get-equal-length-in-the-output

반응형