출력에서 인쇄기를 사용하여 문자열을 형식화하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1809399

  •  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 (아르 자형) 새로운 라이닝없이 메시지를 작성하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top