C의 printf 함수에서 열 정렬

Jinku Hu 2023년10월12일
  1. %{integer}d표기법을 사용하여 C에서 출력 정렬
  2. % * d표기법을 사용하여 C에서 출력 정렬
  3. %*d%{int}d표기법을 사용하여 테이블의 열 정렬
C의 printf 함수에서 열 정렬

이 기사에서는 C의printf함수에서 열을 정렬하는 방법에 대한 여러 방법을 보여줍니다.

%{integer}d표기법을 사용하여 C에서 출력 정렬

printf는 표준 I/O 라이브러리의 일부이며 형식화 된 문자열을stdout 스트림으로 출력하는 데 사용할 수 있습니다. stdout 스트림은 버퍼링됩니다. 따라서 문자열에 개행 문자가 포함되지 않으면 지연이 발생할 수 있습니다. 일반적으로 주어진 문자열은 내부 버퍼가 채워지지 않을 때까지 인쇄되지 않습니다. 그 시점 이후에만stdout 스트림에 내용이 기록됩니다.

printf%문자로 시작하는 형식 지정자를 사용하여 문자열 형식을 제어합니다. 내장 데이터 유형에 대한 다른 지정자 외에도 일부 기호는 정렬 및 패딩과 같은 다양한 기능을 추가 할 수 있습니다. 이 경우%와 형식 지정자 문자 사이에 주어진 정수를 삽입하여 출력 항목의 왼쪽에 채워질 공백 수를 나타냅니다. 결과적으로 여러 행 출력에 동일한 숫자를 포함하여 항목을 오른쪽에 정렬 할 수 있습니다.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[]) {
  int mm1 = 11011;
  int mm2 = 111;
  int mm3 = 11;

  printf("%10d %d\n", mm1, mm1);
  printf("%10d %d\n", mm2, mm2);
  printf("%10d %d\n", mm3, mm3);

  exit(EXIT_SUCCESS);
}

출력:

11011 11011
  111 111
   11 11

% * d표기법을 사용하여 C에서 출력 정렬

또는%*d표기법을 사용하여 동일한 형식화를 수행 할 수 있습니다. 추가로 데이터 인수가 쉼표 뒤에-이므로 정수를 제공해야합니다. 그러나 다중 형식 지정자에%문자가 포함 된 경우 모두 해당 인수 앞에 별도의 정수 값을 포함해야합니다.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[]) {
  int mm1 = 11011;
  int mm2 = 111;
  int mm3 = 11;

  printf("%*d %d\n", 10, mm1, mm1);
  printf("%*d %d\n", 10, mm2, mm2);
  printf("%*d %d\n\n", 10, mm3, mm3);

  exit(EXIT_SUCCESS);
}

출력:

11011 11011
  111 111
   11 11

%*d%{int}d표기법을 사용하여 테이블의 열 정렬

마지막으로 서로 다른 시나리오에서 두 방법을 결합하고 텍스트 테이블 출력에서 열을 정렬 할 수 있습니다. 열 항목이 왼쪽에 정렬되어야하는 경우가 있습니다. 형식 지정자 사이에 음의 정수 값을 삽입하거나%*d표기법을 사용하여 인수로 전달하여이를 달성 할 수 있습니다. 후자의 솔루션은 패딩이 상수로 알려져 있지 않고 런타임 중에 동적으로 계산 될 수있는 경우에 더 적합합니다.

#include <stdio.h>
#include <stdlib.h>

#ifndef MAX
#define MAX 10
#endif

int main(int argc, char const *argv[]) {
  char *row1[] = {"num", "name", "sum"};
  int col1[] = {1, 2, 3};
  char *col2[] = {"one", "two", "three"};
  int col3[] = {1243, 14234, 3324};

  printf("%*s | %*s | %*s\n", -3, row1[0], -MAX, row1[1], MAX, row1[2]);
  printf("%*c | %*c | %*c\n", -3, '-', -MAX, '-', MAX, '-');
  size_t len = sizeof col1 / sizeof col1[0];
  for (int i = 0; i < len; ++i) {
    printf("%-3d | %-10s | %10d\n", col1[i], col2[i], col3[i]);
  }

  exit(EXIT_SUCCESS);
}

출력:

num | name       |        sum
-   | -          |          -
1   | one        |       1243
2   | two        |      14234
3   | three      |       3324
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C IO