현승일 교수
2주차 2강. 입출력 함수(2)
학습내용
학습목표
1. 표준 입력 함수 2. 입력 및 출력 버퍼
1. 표준 입력 함수에 대하여 설명할 수 있다.
2. 입력 및 출력 버퍼에 대하여 설명할 수 있다.
◉ 표준 입력 함수
• 표준 입력장치(키보드)에서 문자, 정수, 실수, 문자열을 입력하여 변수에 저장하는 함수
1. 표준 입력 함수(1)
getchar(); 한 문자를 입력하는 함수 gets(); 문자열 입력 함수
scanf(); 다양한 자료형을 입력하는 함수
키보드로부터 값을 입력하는
함수들
◉ getchar(), gets() 함수
1. 표준 입력 함수(2)
• getchar() 함수
- 한 문자를 표준 입력 장치인 stdin(키보드)에서 입력 (형식) int getchar();
(예) ch = getchar(); //키보드로 부터 한문자 반환
• gets() 함수
- 문자열을 표준 입력 장치인 stdin(키보드)에서 입력 (형식) char *gets(배열변수)
(예) int name[20]; gets(name); // name 배열에 저장
◉ gets() 함수 활용 예
1. 표준 입력 함수(3)
<형식>
scanf (“입력양식”, &변수1, &변수2,… );
1. 표준 입력 함수(4)
◉ scanf() 함수
• 의미
- 키보드로 부터 단일문자, 정수 등을 입력 받아 반환하는 함수 - 사용하기 위해서는 stdio.h 헤더파일을 포함해주어야 함
• scanf() 함수의 변환 문자
- %d(정수형), %ld(long 정수형), %f(실수형),
%lf(double 실수형), %c(단일문자형), %s(문자열)
1. 표준 입력 함수(5)
◉ scanf() 함수
#include <stdio.h>
main() {
int num;
scanf(“%d”, &num); // 하나의 10진 정수를 입력받음 printf(“input num = %d \n”, num);
}
반드시 입력 받는 변수의 주소를 지정해 주어야 함 (& 주소연산자)
1. 표준 입력 함수(6)
◉ scanf() 함수의 형식 지정자
코드 형식
%c 문자를 읽음
%d, %i 10진수로 된 정수를 읽음
%e 실수를 읽음
%f 실수를 읽음(float)
%g 실수를 읽음
%o 8진수로 된 부호가 없는 정수를 읽음
%s 문자열을 읽음
%x 16진수로 된 부호가 없는 정수를 읽음
%p 포인터를 읽음
%n 지금까지 읽어 들인 문자들의 수에 해당하는 정수 값을 받아들임
%u 10진수로 된 부호가 없는 정수를 읽음
%[] 문자들을 찾음
%lf 실수를 읽음(double)
%Lf 실수를 읽음(long double)
1. 표준 입력 함수(7)
◉ scanf_s() 함수
• scanf() 는 문자열 입력 시 배열의 크기를 넘어가는 경우 배열의 경계를 검사할 수 없다는 단점
• 문자열 입력 시 입력데이터가 제한된 크기 이상으로 입력이 되면 보안상의 문제가 발생될 수 있음
• visual studio 2012 이후에는 scanf() 사용 시 오류가 뜨는 경우가 있음
1. 표준 입력 함수(8)
◉ scanf_s() 함수
• 문자나 문자열 입력 시 입력데이터의 보안을 위하여 입력되는 크기를 주어, 크기 이상의 데이터를 변수가 저장하지 않도록 함
• (형식)
scanf_s(“자료형 지정자”, &변수명, 크기);
scanf_s(“%c”, &ch, sizeof(char) );
1. 표준 입력 함수(9)
◉ scanf_s() 함수 실행 예
1. 표준 입력 함수(10)
◉ gets(), scanf() 함수 사용 시 오류 무시
1) pragma 지시자 사용
2) 프로젝트 속성 값 바꾸기
- 다음과 같이 [프로젝트] → [속성] 페이지 열기 [구성속성] → [C/C++] → [전처리기] 항목 중 [전처리기 정의]에 다음과 같이 입력
#pragma warning(disable:4996) ← 컴파일러에게4996에해당하는경고오류를무시하게함
_CRT_SECURE_NO_WARNINGS
◉ 입력 및 출력 버퍼
2. 입력 및 출력 버퍼(1)
• 입력함수를 통해 입력 받는 데이터는
- 프로그램에 의해 바로 읽혀지지 않고 먼저 입력버퍼에 저장 - Enter Key가 입력 시 입력버퍼의 내용이 프로그램에 전달
• 출력함수의 경우도 마찬가지로
- 모니터에 즉시 출력되는 것이 아니라
- 출력버퍼에 저장되었다가 모니터로 출력됨
◉ 라인버퍼(줄 단위) 입력 함수
2. 입력 및 출력 버퍼(2)
• C 컴파일러에서 제공하는 함수는 라인버퍼 입력 방식
• 데이터 입력 시 데이터를 입력하고 [Enter]를 쳐야만 입력함수가 값을 읽어감
라인버퍼 입력 한 줄 전체를 입력할 때까지 기다림
[Enter]를 치면 입력버퍼의 값을 변수에 저장
• getchar()
• scanf()
• gets()
라인버퍼 입력함수
값과 함께 [Enter] 입력 [Enter] : 입력버퍼에 존재
◉ 라인버퍼(줄 단위) 입력 함수 예(1)
2. 입력 및 출력 버퍼(3)
◉ 라인버퍼(줄 단위) 입력 함수 예(2)
2. 입력 및 출력 버퍼(4)
정리하기
1. 표준 입력 함수
- getchar() : 한 문자를 표준 입력 장치인 stdin(키보드)에서 입력 - gets() : 문자열을 표준 입력 장치인 stdin(키보드)에서 입력
- scanf() : 키보드에서 입력된 값을 읽어와 format 문자열로 지정된 코드에 맞게 변환하여 변수에 저장
2. 입력 및 출력 버퍼
- C 컴파일러에서 제공하는 함수는 라인버퍼 입력 방식
- 데이터 입력 시 데이터를 입력하고 [Enter]를 쳐야만 입력함수가 값을 읽어감
다음시간에는…
에 대해 학습해 보겠습니다.
참고문헌