본문 바로가기

개발/내일배움캠프

C언어 conversion specification(서식or형식 지정자)

scanf()나 printf()를 이용해서 값을 받거나 출력할 때 이 형식을 지정하기위해 사용하는 지정자에대해 일부 정리.

 

더 정확한 내용은 반드시 마이크로소프트 문서 등등 참고할것!!

https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions?view=msvc-170

 

형식 사양 구문: 'printf' 및 'wprintf' 함수

Microsoft C 런타임 'printf' 및 'wprintf' 함수의 형식 지정자 구문을 설명합니다.

learn.microsoft.com

 

 

%[flags][width][.precision][size]type

형식 지정자의 형태는 다음의 형태를 띄며 이를 분해하여 살펴보겟음.

 

  1. 형식 지정자는 우선 "%"로 시작함
  2. [flags] : 플래그 지정
  3. [width][.precision] : 너비,소숫점 자리수 지정
  4. [size] : 인수 크기 사양
  5. type : 형식 변환 지정자

형식 변환 지정자

입력/출력할 데이터의 형식(Type)이 무엇인지 정의하는 부분.

해당 부분을 배울 때 가장 먼저 접하게 될 부분이다.

예를 들면 %d이면 10진수가 되는것처럼 형식을 지정하는 부분.

익숙한 타입 몇가지를 나열하면 다음과 같다.

형식  
d 10진수 정수
f 부동 소수점(float, double)
c 단일 문자(char)
s 문자열(string)

 

 

플래그 지시문

부호를 출력할것인지, 왼쪽 정렬할것인지 아니라면 빈부분을 채울것인지를 지정

형식 의미
- 왼쪽 정렬
+ 접두사 부호 출력(음수일때 -, 양수일때 +)
0 최소 너비가 주어졌을 때, 빈 부분을 채움(왼쪽정렬시 나오지않음)

 

 

너비, 소수점 자리수 지정

[width][.precision] 두가지 부분을 묶어서 볼텐데, 정수형은 소수점 자리수가 없으니 width만 지정한다.

 

너비와 소숫점은 정수 숫자로 표현하게 된다

width는 출력될 문자 수 전체를 지정하며, 최소 몇칸을 지정한다. 

예시

  • printf("%05d", 123);
    -> 출력결과는 '00123' 맨앞의 숫자0은 플래그 지시문이고 너비는 5이므로
        세자리수 123을 출력하고 왼쪽 두칸을 00으로 채움.

소수점 자리수는 비슷하지만 기본적으로 공간이 남으면 0으로 채운다.
예시

  • printf("'%10.7f'", 123.456);
    -> 출력결과는 '123.4560000' 소수점 자리수가 7이기 때문에 뒤로 0이 4개 더 붙는것을 볼 수 있다.
    눈여겨볼점은 너비가 10인데 출력결과는 소수점을 포함한 11문자인것으로, 즉 너비는 출력할 최소한의 글자수인것이다.

인수 크기 사양

해당 내용은 생각보다 복잡하여 대강 개념만 이해해보았음.

[size] 에 해당하는 부분으로 출력보다는 입력에 사용되며 값의 크기를 지정한다.

이부분이 조금 복잡한데 정수만 살펴보면 

우리가 보통 출력을 배울 때 int는 %d, long int는 %ld, long long int는 %lld로 배우게 되는데
이를 분해해서 이해할 필요가 조금 있다.

 

%ld를 예시로 들게 되면 

l은 크기가 long int의 크기를, d는 부호있는 정수(signed decimal)로 출력하라는 뜻이 된다.

마찬가지로 %lld는 ll이 long long int 이고 d는 부호있는 정수로 출력하라는것이 되는것이다.

lld를 llu(unsigned decimal)로 변경하면 컴퓨터는 주어진 수를 부호없는 정수로 해석하게 될 것이다.

 

이는 C언어가 플랫폼에 따라 타입의 크기를 다르게 이용하도록 만들어졌기 때문인데(이식성) 이는 심심할때 따로 알아보도록하자...

 

언제 쓰이게 될지는 모르지만 확실하게 알아놓는게 좋을것같아 파고들어봄