OneDev
[C] 9. 입력받기(scanf 함수) 본문
이번 포스팅에서는 C 에서 문자 혹은 숫자를 입력받는 방법에 대해 알아보자.
기본적으로 C에서 무언가를 입력받을 경우에는 scanf 함수를 이용한다.
1. scanf 함수란?
scanf 함수는 C 의 표준 입력 함수로, 다양한 데이터를 서식에 맞춰 입력받을 수 있게 해준다.
scanf 에 관한 기본적인 정보는 아래와 같다.
- 헤더 : stdio.h
- 원형 : scanf("변환문자", &변수명);
scanf 함수는 우리가 입력을 하기 전까지 계속 기다리며, 엔터를 눌러야지만 입력으로 처리된다.
(예)
#include <stdio.h>
int main(){
int a;
scanf("%d", &a); // a 라는 정수형 변수를 입력 받는다
return 0;
}
2. scanf 함수 사용법
위에서도 얘기했지만, 기본적인 틀은 아래와 같다.
(1) 변환문자
입력받을 데이터의 형태를 지정해주는 부분이다.
예를 들면 %d 는 정수형 데이터를, %f 는 float 형 데이터를 의미한다.
변환문자에 맞는 데이터형 변수를 넣지 않는다면 보안상 문제가 생길수도 있으니 유의하자.
변환문자에는 다음과 같은 것들이 있다
- %d : int 타입 정수형
- %c : char 타입 문자형
- %s : char* 타입 문자열 or char[] 타입 문자열
- %lf : double 타입 실수 ( LF의 소문자 / if 가 아니다)
- %f : float 타입 실수
(주의) printf 함수의 경우 double형 변수나 float형 변수 모두 %f 로 출력하는 반면에 scanf 함수는 double형 변수는 %lf 를 통해 입력받아야 한다.
즉, float 형 데이터 입력 받을 시 → %f 사용 / double 형 데이터 입력 받을 시 → %lf 사용
또한, printf 함수는 모든 정수형 변수가 %d 로 출력 가능하지만, scanf함수는 같은 정수라도 자료형에 맞는 포맷을 사용해주어야 한다.
(2) 주소연산자(&)
&는 변수의 주소를 타나내는 주소연산자이다.
예를 들어 &a 는 a라는 변수의 주소를 나타낸다.
scanf 함수에서는 변수명 앞에 이 주소연산자를 붙여주어야 한다.
다만 배열을 입력받을 경우는 주소연산자 & 를 붙이지 않는다.
#include <stdio.h>
int main()[
int a;
int arr[10];
scanf("%d \n", &a); // int 형 변수 a를 입력받을때는 & 를 붙여준다
scanf("%s \n", arr) // 배열 arr 을 입력받는 경우엔 붙이지 않는다.
scanf("%c \n", &arr[2]); // 다만 배열의 특정 원소를 입력받는 경우에는 &을 붙인다.
return 0;
}
(3) 여러가지 데이터 입력받기
scanf 함수는 한번에 여러가지 데이터를 입력받을 수 있다
--> 이부분은 차후 추가 예정
3. _CRT_SECURE_NO_WARNINGS 해결법
scanf 함수는 보안에 취약하다. 지정한 타입보다 큰 데이터를 입력받게 되면 버퍼 오버플로 라는 오류가 발생할 수 있기 때문이다.
그렇기 때문에 scanf 함수를 이용할 경우 종종 _CRT_SECURE_NO_WARNINGS 라는 문구와 함께 에러가 뜨는 경우가 있는데, 해결방법은 크게 두가지이다.
(1) 소스파일 상단에 #define _CRT_SECURE_NO_WARNINGS 적어주기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
...
...
...
(2) 소스파일 속성에 적어주기
사용중인 소스파일 우클릭 -> 속성 클릭
C/C++ -> 전처리기 -> 전처리기 정의 우측칸에 _CRT_SECURE_NO_WARNINGS; 입력후 적용
'Language > C' 카테고리의 다른 글
[C] 11. 논리연산자 - &&, ||, ! / Short Circuit Evaluation(SCE) (0) | 2022.07.20 |
---|---|
[C] 10. 조건문 - if 문 (0) | 2022.07.20 |
[C] 8. 오버플로우(overflow) (0) | 2022.07.15 |
[C] 7. 연산자(2) - 비트연산자 (0) | 2022.07.14 |
[C] 6. 연산자(1) -산술연산자/대입연산자/복합대입연산자 (0) | 2022.07.14 |