출력에서 인쇄기를 사용하여 문자열을 형식화하는 방법은 무엇입니까?
-
05-07-2019 - |
문제
두 가지 기능이 있습니다. 하나는 다음과 같은 메시지를 생성합니다. 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 개의 열을 인쇄합니다. header1
그리고 header2
할 수 있습니다. 모든 구현에 있는지 모르겠습니다 %n
그러나 Solaris와 Linux는 그렇습니다.
또한 메시지를 직접 연결하기 위해 공간 추가를 수작업으로 계산하는 다소 낮은 기술 솔루션도 있습니다. 메시지 문자열에 몇 개의 후행 공간을 포함하지 못하게하는 것은 없습니다.
탭을 사용하여 시작하십시오 티 문자 수정 자. 고정 된 위치 (열, 터미널 링고)로 발전합니다. 그러나 열 너비보다 차이가있는 경우 도움이되지 않습니다 (올바르게 기억하면 4 자).
이 문제를 해결하려면 고정 된 수의 탭 (5? 6?, 시도)을 사용하여 "OK/NOK"물건을 작성한 다음 reture (아르 자형) 새로운 라이닝없이 메시지를 작성하십시오.