검색결과 리스트
글
표준입출력함수 printf() / scanf()
printf 와 scanf 는 포맷에 맞추어, 표준 입출력을 수행하는 함수, 이 함수들도 표준입출력 버퍼의
데이터를 다루는 함수들이다. printf 와 scanf 함수에 인자로 적절한 포맷을 지정하는 변환코드를
지정해 줄 수 있다.
변환코드
%c : 문자
%d : 정수
%f : 실수(단정도 - float)%lf : 실수(배정도 - double)
printf 함수에 변환코드를 좀더 세부적으로 표현해줄 수 있다.
printf 함수에 %nd (n은 양수) 은 최소 n 자리를 확보하라는 뜻이다.
int a = 12345;a값을 다음과 같은 변환코드에 적용을 하면
- %8d : 최소 8자리를 확보하여 출력한다. >> _ _ _ 1 2 3 4 5 가 출력됨.
- %3d : 최소 3자리를 확보하지만, 더 큰자리수를 표현할수 잇다. >> 12345
- %08d : 최소 8자리를 확보하되, 빈칸은 0으로 표시한다. >> 0 0 0 1 2 3 4 5
- %-8d : 최소 8자리를 확보하되, 왼쪽칸 부터 채운다. >> 1 2 3 4 5 _ _ _
실수는 디폴트로 소수 6자리까지 표시를 한다.
double d = 123. 456
에 변환코드를 적용해보면,
- %f :디폴트로 소수 6번째 자리까지 표시한다. >> 1 2 3 . 4 5 6 0 0 0
- %8.2f : 최소 8자리를 출력하되, 소수 2째 자리까지 표시 >> _ _ 1 2 3 . 4 6
%08.2f : 최소 8자리 중, 소수 2째자리까지 표시하고 빈칸은 0으로 채움 >> 0 0 1 2 3 . 4 6 -
%.2f : 소수 2째자리까지 표시하고, 최소 자리수는 알아서 출력 >> 1 2 3 . 4 6
- %o : 8진수로 표현
%0x : 16진수로 표현 - %% : % 문자 자체 출력
- % s : 문자열 출력
정수를 8진수 16진수로 표현하기
8진수 1자리수는 2진수 3비트에 해당하며, 16진수 1자리는 2진수 4비트에 해당한다.
int a = o73;
8진수 73을 2진수로 표현을 하면 0111 0011 로 표현할 수 있다.
int b = 0xf4;
16진수 64를 2진수로 표현하면 1111 0100 로 표현할 수 있다.
scanf
Scanf : 표준 입력버퍼에서 지정한 서식에 맞게 읽어오는 함수로, 값을 저정할 메모리의 정확한 물리적인 주소를
전달해야 한다. 통상 주소 연산자 &(엠퍼센트) 를 변수 앞에 두어 변수의 주소를 전달한다.
1234 (천이백삼십사) 라는 값을 입력받고 싶은 경우, getchar() 함수는 한 문자를 반환하기 때문에
네 문자를 읽어서 적절한 정수형태로 변환을 해주어야 한다. 이러한 과정은 어렵진 않지만 번거로운 작업으로
scanf 를 사용하여 편리하게 읽어올 수 있다.
int a;
scanf("%d", &a);
위 코드를 실행하여 1234를 입력했다고 가정하면, sscanf
whitespace(공백, 탭, 엔터)를 만날 때까지 값을 읽어들이고, 변환코드에 지정한 형식으로 자동으로 변환하여
변수에 값을 담아준다.
scanf 에서의 변화코드
scanf("%3d", &a);
scanf에서 변환코드는 printf 와는 다르게, whitespace가 나올 때까지 읽되, 최대 3문자까지만 읽어들인다는 의미이다.
즉 whitespace가 나오지 않더라도, 3문자까지 읽으면 더이상 버퍼에서 읽지 않는다는 것이다.
scanf 에 변환코드를 여러개 주어 한번에 여러값을 읽어들일 수 있다.
char ch;
int a;
float f;
double d;
scanf("%c %d %f %d", &ch, &a, &f, &d);
scanf 사용시 주의사항
1) printf 에서는 float와 double형 데이터를 위해 %f 변환코드를 사용할 수 있었지만, scanf에서는
반드시 float는 %f, double은 %lf 변환코드를 사용하여야 한다.2) %c 를 제외한 변환코드는 whitespace가 나올때까지 읽지만, %c는 whitespace 문자가 나올때까지 읽지만
whitespace를 버퍼에 제거하지 않고 남겨두어 이후 오작동에 원인이 될수 있다. %c를 사용한 후 fflush(stdin)를사용하여 버퍼를 비워주는 것이 좋다.
3) scanf("%d \n" , &a) 나 scanf("%d ", &a); 와 같이 변환코드 다음에 다른 문자가 있으면, 다른 변환코드가 있을거라가정하여 의도하지 않게 2번 입력해야 하는 경우가 발생하기 때문 포맷문자열에는 변환코드만을 사용한다.
이 글은 스프링노트에서 작성되었습니다.
'언어로그 > C/C++' 카테고리의 다른 글
| 표준입출력함수 getchar() / putchar() (0) | 2011.02.22 |
|---|---|
| 비표준 입출력함수 getch(), getche() (0) | 2011.02.22 |
| 표준입출력함수 printf() / scanf() (0) | 2011.02.22 |
| 음수의 표현 (0) | 2011.02.22 |
| C 언어 학습에 핵심. 변수와 상수 (0) | 2011.02.22 |
| C 프로그램 실행과정 (0) | 2011.02.22 |