2021. 1. 7. 16:07ㆍ프로그래밍 공부/C 공부
형식
scanf("%d", &var); 형식으로 사용된다.
%d에 값을 입력하면 var변수에 저장되는 형식, &var로 변수의 주소를 참조하기 때문에 포인터가 사용된 함수임을 짐작할 수 있다.
왜 포인터를 사용할까?
getchar는 한번에 하나의 값을 입력받는데 반해 scanf는 한번에 여러개의 값을 입력받기 때문에 한번에 하나의 값을 반환하는 return문을 활용할 수 없다.
이에 포인터를 사용하게 된 것이다.
주의사항
(1) scanf는 Enter와 '공백'을 통해 입력값을 구분한다.
scanf("%s %s" , &var1, &var2); 에 대해서 [ Gwangjin, Seoul Guro, Seoul ] 을 입력할경우 var1은 Gwangjin,을 var2는 Seoul을 입력받게 된다. 나머지 Guro, 와 Seoul은 버퍼에 남는다.
따라서 문자열에 공백이 포함된다면 scanf보다는 gets를 쓰는게 좋다.
(2) 입력하는 키워드(%d, %s등)와 입력받는 변수의 형태가 일치해야한다.
scanf함수에서 %d를 사용하면 int형 포인터를 사용하도록 저장되어있다. 따라서
char var1 ;
short var2 ;
int var3;
scanf("%d %d %d",&var1,&var2,&var3);
를 시행하면 var1과 var2는 준비된 메모리를 초과한 데이터를 입력받게 된다.
컴파일 할때는 문제가 없지만 실행할때 문제가 될 수 있다.
scanf함수의 자료형
입력 | 변수 |
%c | char(unsigned) |
%o %d %x | int(unsigned) |
%f | folat |
%lf | double |
%s | char *, char[ ] |
'프로그래밍 공부 > C 공부' 카테고리의 다른 글
[C] 배열과 포인터 (0) | 2021.01.07 |
---|---|
[C] scanf 함수 2 (0) | 2021.01.07 |
[C] 문자, 문자열 (0) | 2021.01.06 |
[C] void 포인터 (0) | 2021.01.06 |
[C] 포인터 활용 (0) | 2021.01.06 |