Chapter 3. Formatted Input/Output

지환·2021년 10월 30일
0
post-custom-banner

3.1 The printf Function

format string = ordinary characters + conversion specifications(begin with the % character)

conversion specifications : % 문자 뒤에 오는 정보가 값을 internal form(binary)에서 printed form(characters)으로 바꾸는 방법을 기술한다.

printf는 conversion specificaions의 개수나 type을 체크하지 않으므로 개발자가 잘 판단해야한다. conversion specifications에 따라 printed form으로 출력될 뿐이다.

general form of conversion specification : %m.pX (or) %-m.pX
m : minimum field width
p : precision(X에 따라 p의 의미는 달라진다)
"-" sign : left justification

X :
1. d - display an integer in decimal(base 10) form
2. e - display a floating-point number in exponential format(scientific notation)
3. f - display a floating-point number in "fixed decimal" format, without an exponent
4. g - display a floating-point number in either exponential format or fixed decimal format


3.2 The scanf Function

printf와 마찬가지로 conversion specificaions의 개수나 type을 체크하지 않으므로 개발자가 잘 판단해야한다.

How scanf Works

  1. format string의 conversion specification에 맞는 정보를 입력 문자열 왼쪽부터 찾는다. (ex. %d라면 입력 문자열 왼쪽부터 정수를 찾는다.)
  2. 1의 과정에서 만약 "숫자의 시작을 찾는 경우"에는 앞부분의 white-space characters을 무시한다. (ex. format string이 "%d"이고, 입력 문자열이 " 5"라면 5앞의 white-space characters은 무시한다. 하지만 만약 format string이 "%c"였다면 무시하지 않으므로 숫자의 경우에만 해당된다고 말하는 것이다.)
  3. 성공적으로 읽어내지 못하게 된다면, scanf는 종료되고 남은 입력 문자열은 다음 처리를 위해 남겨진다.
    (3번에서 성공적으로 읽어내지 못한다는건, "처음부터" 해당되지 않는 경우를 말하는거다. 예를들어 "%d %d""5 65"를 입력하면 처음 %d5가 입력되고, 5 다음 space가 나와서 다음 conversion specification으로 넘어가게 된다. 하지만 저기에 "s o"를 입력하면 "처음부터" 문자열과 %d가 맞지 않아 성공적으로 읽어내지 못하므로 scanf가 아예 종료된다. 둘은 다른 경우다.)

%e, %f, %g는 scanf에서 interchangeable(모두 floating-point number를 입력받기 위해 쓰임)

scanf로 입력을 받으면, 주로 입력할때의 엔터키로 인해 new-line character가 마지막에 처리되지 못하고 남아있게된다.

Ordinary characters in Format Strings

White-space characters : (format string의) 하나의 white-space character는 (input string의) 여러개(including none)의 white-space characters와 대응한다.
Other characters : format string의 non-white-space character와 input string의 non-white-space character가 일치하면 이를 버리고 넘어가고, 일치하지 않으면 scanf가 종료되고 일치하지 않은 문자부터 input string은 put back된다.

post-custom-banner

0개의 댓글