[C] scanf 함수 1

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