공부했던 자료 정리하는 용도입니다.
재배포, 수정하지 마세요.
표준 라이브러리와 printf, scanf 함수
- printf 함수
- scanf 함수
* EOF
* 공백을 포함하여 입력받기 - 특수문자, 서식 문자, 필드 폭
* 특수문자(Escape Sequence)
* 서식 문자
* 필드 폭
표준 라이브러리와 printf, scanf 함수
- 표준 함수 : 기본적으로 제공되는 함수
- 표준 라이브러리 : 표준 함수들의 모임
printf 함수
// 서식문자의 위치는 제한이 없다.
printf("%d",1234);
printf("My age : %d\n", 20;
기본적으로 제공되는 표준 함수로 함수호출시 첫 번째로 전달되는 문자열을 모니터에 출력하는 기능을 한다.
사용하기 위해선 @@stdio.h@@ 헤더 파일을 선언해주어야 한다.
- ``%d`` : 서식 문자(conversion specifier)라고 하는데 출력의 형태를 지정하는 용도로 사용된다. 서식 문자의 삽입 위치에는 제한이 없어 다양하게 문자열을 조합해서 출력하는 것이 가능
- ``%d``는 10진수 정수 형태의 출력을 의미
- 두 번째 인자가 출력의 대상이 되며 특정 값이 아닌 연산식이 오는 것도 가능
scanf 함수
scanf("%d", &[변수 이름]);
int scanf(char const * const _Format, ...);
// 성공하면 가져온 값의 개수를 반환, 실패하면 EOF(-1)을 반환
//여러개 인 경우에는 콤마(,)로 구분한다.
scanf("%d %d %d", &num1, &num2, &num3);
``scanf`` 함수를 이용하면 키보드로부터 다양한 형태의 데이터를 입력받는 것이 가능하다. 서식 문자의 수를 조절하여 입력받는 데이터의 개수와 타입도 정할 수 있다. 값을 입력하고 @@enter@@키를 입력해야만 @@scanf@@함수의 데이터 입력이 완료되므로 주의한다. 값을 여러 개 입력받는 경우 공백을 기준으로 데이터를 구분하므로 공백에 해당되는 스페이스바, 탭(tab) 또는 엔터(enter) 키를 입력해야 한다.
- ``%d`` : 서식 문자, ``printf``에서 사용한 것과 같다.
- ``&변수 이름`` : 입력받은 값을 지정한 변수에 저장한다.
■ EOF
End Of File의 약자로, 더이상 값을 읽을 수 없는 상태를 나타낸다. (파일의 끝) 콘솔(터미널, 명령 프롬프트)에서는 다음 키의 입력을 EOF로 정해놓았다. EOF는 ##stdio.h## 헤더에 정의되어 있으며 정수 ##-1##이다. 보통 EOF는 파일 처리 함수가 실패했을 때 반환된다.
- Windows : ``Ctrl + Z``
- Linux : ``Ctrl + D``
■ scanf로 공백까지 포함하여 입력받기
서식 지정자를 ``%[^\n]s``와 같이 지정하면 공백까지 포함하여 문자열을 입력받을 수 있다.
+ dev c++로 unsigned char형 변수 입력받기
#define __USE_MINGW_ANSI_STDIO 1 // Dev-C++(MinGW)에서 %hhu를 사용하기 위한 설정
scanf에서 unsigned char형 변수에 저장하려면 서식지정자로 ##%hhu##를 사용해야 하는데 Dev C++에서는 표준 scanf함수 대신 GNU scanf 함수를 사용하기 때문에 ##%hhu##를 사용할 수 없다. 그래서 위와 같이 매크로를 정의해주어야 표준 scanf 함수와 서식지정자 ##%hhu##를 사용할 수 있다.
특수문자, 서식문자, 필드 폭
``printf``와 ``scanf``의 f는 모두 formatted(서식이 지정된)를 의미한다. 그래서 서식 문자나 필드 폭등을 이용해서 입출력의 형태를 지정해줄 수 있다.
1. 특수문자(Escape Sequence)
특수문자 종류 | 설 명 |
\a | 경고음 발생 |
\b | 백스페이스(backspace) |
\f | 폼 피드 - Form Feed : 프린트 제어시 다음 페이지로 넘기는 기능 (프린터 출력을 위해 정의된 특수문자) |
\n | 개행 ,줄바꿈 (new line) |
\r | Carriage Return : 커서의 위치를 커서가 위치한 줄의 맨 앞으로 위치하는 기능 |
\t | 수평 탭 |
\v | 수직 탭 (프린터 출력을 위해 정의된 특수문자) |
\\ | 역슬래시(\) |
\' | 싱글쿼터(') |
\" | 더블쿼터(") |
\? | 물음표(?) |
\ooo | 아스키 문자 8진수 출력 |
\xhhh | 아스키 문자 16진수 출력 |
2. 서식문자
서식문자 종류 | 출력 대상(자료형) | 설 명 |
%d | char, short, int | 부호 있는 10진(Decimal) 정수 |
%ld | long | 부호 있는 10진(Decimal) 정수 |
%lld | long long | 부호 있는 10진(Decimal) 정수 |
%u | unsigned int | 부호 없는 10진 정수(양수만 표현 가능) |
%o | unsigned int | 부호 없는 8진(Octal) 정수 |
%x, %X | unsigned int | 부호 없는 16진(Hexa_decimal) 정수 |
%f | float, double | 10진형 부동(Floating) 소수점 실수 -> 기본적으로 소수점 이하 6자리까지 출력(나머지는 0으로 채움) |
%Lf | long double | 10진형 부동(Floating) 소수점 실수 |
%e, %E | float, double | e 또는 E 방식의 부동소수점 실수 |
%g, %G | float, double | 값에 따라 %f, %e 사이에서 선택 |
%c | char, short, int | 단일문자(character), 값에 대응하는 문자 |
%s | char * | 문자열(String) |
%p | void * | 포인터 주소 값 |
%% | %기호 출력 |
#include <stdio.h>
int main(void)
{
int num1 = 7, num2 = 13;
printf("%o %#o \n", num1, num1);
printf("%x %#x \n", num2, num2);
return 0;
}
8진수나 16진수의 경우 출력된 내용이 다른 진법인 것을 알리기 위해 가급적 서식 문자에 `` # ``을 포함시켜서 출력하는 것이 좋다.
#include <stdio.h>
int main(void)
{
float num1;
double num2;
long double num3;
printf("실수 입력1 (e 표기법으로) : ");
scanf("%f", &num1);
printf("입력된 실수 %f \n", num1);
printf("실수 입력2 (e 표기법으로) : ");
scanf("%lf", &num2);
printf("입력된 실수 %f \n", num2);
printf("실수 입력3 (e 표기법으로) : ");
__mingw_scanf("%Lf", &num3);
__mingw_printf("입력된 실수 %Lf \n", num3);
}
dev C++ 환경에서는 %Lf의 경우 출력 오류가 발생할 수 있다.
http://blog.daum.net/_blog/BlogTypeView.do?blogid=02XGV&articleno=13720670&categoryId=558126®dt=20190416203617
3. 필드 폭
출력되는 필드의 폭을 지정할 수 있다.
서식 문자 | 출력 형태 |
%5d | 필드 폭을 5칸 확보하고 오른쪽 정렬로 출력 |
%-5d | 필드 폭을 5칸 확보하고 왼쪽 정렬로 출력 |
%+5d | 필드 폭을 5칸 확보하고 오른쪽 정렬한 상태에서 양수는 +, 음수는 -를 붙여 출력 |
'기타 > C' 카테고리의 다른 글
[C] 함수 (0) | 2020.04.27 |
---|---|
[C] 조건문, 반복문 (0) | 2020.04.16 |
[C] 자료형 변환 (0) | 2020.04.08 |
[C] 데이터 표현 방식, 기본 자료형과 상수 (0) | 2020.04.07 |
[C] 함수, 변수, 연산자 (0) | 2020.04.03 |