공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 


 표준 라이브러리와 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

+ Recent posts