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
printf와 마찬가지로 conversion specificaions의 개수나 type을 체크하지 않으므로 개발자가 잘 판단해야한다.
%d
라면 입력 문자열 왼쪽부터 정수를 찾는다.)"%d"
이고, 입력 문자열이 " 5"
라면 5앞의 white-space characters은 무시한다. 하지만 만약 format string이 "%c"
였다면 무시하지 않으므로 숫자의 경우에만 해당된다고 말하는 것이다.)"%d %d"
에 "5 65"
를 입력하면 처음 %d
에 5
가 입력되고, 5
다음 space
가 나와서 다음 conversion specification으로 넘어가게 된다. 하지만 저기에 "s o"
를 입력하면 "처음부터" 문자열과 %d가 맞지 않아 성공적으로 읽어내지 못하므로 scanf가 아예 종료된다. 둘은 다른 경우다.)%e
, %f
, %g
는 scanf에서 interchangeable(모두 floating-point number를 입력받기 위해 쓰임)
scanf로 입력을 받으면, 주로 입력할때의 엔터키로 인해 new-line character가 마지막에 처리되지 못하고 남아있게된다.
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된다.