2009년 04월 08일
-scanf() 함수
가변적인 개수의 인수를 받아들이며 최소 2개의 인수를 필요.
첫번째 인수는 입력된 내용을 변환하는 방법을 scanf()에게 알려주기 위해 특수한 문자를 사용하는 형식화 문자열이며 두번째 인수와 추가 인수는 입력된 데이터가 저장되는 변수 주소.
-scanf()의 형식화 문자열
빈칸이나 탭은 무시되지만 형식화 문자열을 더욱 읽기 쉽게 만들기 위해 사용.
%가 아닌 문자는 입력시 공백 문자가 아닌 문자들과 함께 scanf()의 동작에 관여.
% 문자와 특수한 의미를 가지는 문자로 구성되는 하나 이상의 변환 문자는 일반적으로 각각의 변수에 대응하는 하나의 변환 문자를 가지고 있다.
반드시 포함되어야 하는 것은 변환 문자. 각각의 변환 문자에는 %기호로 시작하고 특별한 순서에 의해서 선택적으로 사용되거나 반드시 포함되어야 하는 구성요소를 가진다.
-구성
% 문자 바로 다음에 입력되는 선택적인 할당 제한 문자(*)는 현재의 변환 문자에 대응하는 변환을 수행하지만 결과는 무시하도록 지시.
필드 폭은 입력 필드의 폭을 문자 단위로 지정하는 값. 현재의 변환 동작을 수행하기 위해 stdin에서 몇 개의 문자를 입력해야 하는지 지정한다. 필드 폭을 지정하지 않으면 다음에 나타나는 공백까지로 정해진다.
형 지정자는 변환 문자에서 % 외에 반드시 포함되어야 하는 하나의 구성 요소. scanf()가 입력 내용을 받아들이는 방법을 알려주는 하나 이상의 문자.
정밀도 지정 문자가 포함되면 형 지정자의 의미가 바뀐다. 정밀도 지정 문자는 h, I, L이 될 수 있다.
-변환 문자에 포함되는 형 지정자.
1. d - int * - 10진 정수형
2. i - int * - 10진 정수형, 앞에 0을 포함하는 8진 정수형, 앞에 0x나 0X를 호함하는 16진 정수형
3. o - int * - 앞에 0을 포함하거나 포함하지 않는 8진 정수형
4. u - unsigned int * - 부호 없는 10진 정수형
5. x - int * - 앞에 0x나 0X를 포함하거나 포함하지 않는 16진 정수형
6. c - char * - 하나 이상의 문자를 읽어들이고 인수에 의해 지정된 메모리 영역에 순서대로 저장. 종료 문자 \0는 추가되니 않는다. 필드 폭이 지정되지 않으면 한 문자를 읽어들이고 필드 폭이 주어지면 공백을 포함하여 지정된 수의 문자를 읽어들인다.
7. s - char * - 공백이 아닌 문자로 구성되는 문자열을 지정된 메모리 영역에 저장하고 종료 문자 \0을 추가.
8. e, f, g - float * - 부동 소수형 숫자. 숫자는 소수점 형태나 공학식 표기 방법으로 입력할 수 있다.
9. [...] - char * - 문자열.괄호 내에 포함되어 있는 문자만 입력. 입력 동작은 일치하지 않는 문자가 나타나거나 지정된 필드 폭 이상 사용되거나 엔터 키를 누르는 즉시 종료. 문자 ]를 입력하기 위해서는 []...]와 같이 처음에 위치시켜야 한다. 문자열의 마지막은 종료 문자 \0이 포함.
10. [·...] - char * - 괄호 내에 포함되지 않는 문자가 입력되는 것을 제외하면 [...]와 동일
11. % - 없음 - 문자 그대로 5 문자를 읽어들인다. 할당 동작은 수행되지 않는다.
-정밀도 지정 문자
h - 형 지정자 d, i, n, o, u, x 앞에 사용될 때 인수가 int형이 아니라 short형에 대한 포인터라는 것을 지정. PC에서는 short형이 int형과 동일하므로 전혀 필요 없다.
I - 형 지정자 d, i, n, o, u, x 앞에 사용될 때 인수가 long형에 대한 포인터라는 것을 지정. 형 지정자 e, f, g 앞에 사용될 때 인수가 double형에 대한 포인터라는 것을 지정.
L - 형 지정자 e, f, g 앞에 사용될 때 인수가 long double형에 대한 포인터라는 것을 지정.
책에서는 나머지 문자를 다루는 방법이 나와있지만 여기에서는 보류.
...그나저나 내가 지금 제대로 공부하고 있는 것 맞는지 모르겠다.
# by 고양이씨 | 2009/04/08 13:47 | 현제의 공부현황 | 트랙백