본문 바로가기
Basic/C/C++

[C언어] 제 7 강 : scanf함수

by boxbop 2012. 1. 11.
반응형

 키보드 입력에 사용되는 scanf함수에 대하여 알아보겠습니다.
사실 scanf함수는 배열과 포인터가 바탕이지만 자주 사용되는 함수이므로 미리 배워보도록 하겠습니다. scanf함수는 printf함수와 매우 비슷하면서도 상반된 기능을 제공합니다.

 scanf("%d", &number);

 언뜻보기에도 printf함수와 비슷하죠? 위에 나타난 함수의 이미는 키보드로부터 정수를 입력받아서, 변수 number에 저장하라는 뜻입니다. 단, 여기서 저장할 변수 앞에는 '&'기호를 붙여주는데요, 사실 이 기호는 연산자입니다. 해당 변수의 주소값을 얻게되는거죠... 여기서부터는 나중에 배울 포인터의 개념에 해당하므로 기회가 된다면 나중에 좀 더 자세하게 알아보도록 하겠습니다. 즉, scanf함수는 printf함수와는 달리 변수의 이름말고 값을 저장할 변수의 주소를 묻습니다. 그래서 연산자 '&'를 사용하여 주소 값을 전달해주는 겁니다^^ 중요한 내용은 여기까지 입니다. 쉽죠~????ㅋㅋㅋ

 scanf("%d", &number)은 정수형 값을 입력 받고
 scanf("%lf", &number)은 실수형 값을 입력 받습니다.
그리고 char형이나 short형, int형은 %d를 사용하지만 int형보다 큰 값, long long형처럼 큰 자료형은 %lld를 사용합니다^-^

 그렇다면 scanf함수는 하나의 값만 입력받을 수 있을까요? 아닙니다. printf함수와 마찬가지로 여러값을 동시에 입력받을 수 있습니다.

 scanf(" %d %d %d", &number1, &number2, &number3);

눈치채셨나요? 서식문자 사이에 공백이 존재합니다. 이는 각각의 값을 구분해주는 기준인거죠~ 여기서 말하는 공백은 스페이스바, 탭, 엔터키의 입력을 말합니다. 예를들어 3가지의 값을 입력할때 1 2 3 이런식으로 또는  1 엔터, 2 엔터 3엔터, 이런식으로 입력이 가능하다는거죠. 그리고 항상 데이터의 입력부분의 마지막은 엔터키로 마무리 해줍니다^-^

 그렇다면 또 한가지 의문점이 생길 수 있습니다. 데이터의 입력을 구분하기 위해서 공백 이외의 문자를 사용할 수 있을까 입니다. 역시 가능합니다. 다음 예제를 보겠습니다.

 scanf(" %d - %d - %d", &number1, &number2, &number3);
 scanf(" %d **- %d **- %d", &number1, &number2, &number3);

 첫 번째 함수는 '-'로 , 두 번째 함수는 '**-'로 데이터의 입력을 구분합니다.  즉 scanf 함수에서는 서식문자 사이에 다른 문자가 존재하면 이를 데이터의 입력 형태를 지정하는 것으로 인식합니다.

 scanf 함수에 대하여 이해가 좀 가셨나요~? 여기서 마치도록 하겠습니다^-^
반응형