sourcecode

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

copyscript 2022. 7. 26. 23:31
반응형

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

두 가지 기능이 있습니다. 하나는 다음과 같은 메시지를 생성합니다.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다음 2가지 형식 중 하나를 선택할 수 있습니다(절단 유무).

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]);

두 문자열이 같은 너비의 두 열을 인쇄합니다.header1그리고.header2있을 수 있습니다.모든 구현이 다음 기능을 갖추고 있는지 모르겠습니다.%n하지만 Solaris와 Linux에서는 가능합니다.

또한 손으로 공간을 세어 메시지를 정렬하는 다소 낮은 기술 솔루션도 있습니다.메시지 문자열에 몇 개의 후행 공백을 포함할 수 있습니다.

탭(\t 문자 수식자)부터 시작합니다.고정 위치(칼럼, 말단 언어)로 이동합니다.

단, 열 너비(제 기억으로는 4글자) 이상의 차이가 있으면 도움이 되지 않습니다.

이 문제를 해결하려면 , 「OK/NOK」라고 하는 것을, 고정수의 탭(5?6?, 시험해 보세요)으로 써 주세요.그런 다음 줄 바꿈 없이 (\r)을 돌려 메시지를 기록합니다.

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

반응형