기타 강좌

3-2-나.scanf

프로그램은 혼자 실행되는 것이 아니라 보통 사용자와 상호 작용한다. 어떤 특정한 동작을 하려면 사용자로부터 명령을 받아 들이거나 동작에 필요한 기본적인 정보를 입력받아야 한다. 예를 들어 바이오 리듬 프로그램을 작성한다면 생년월일과 조사하고 싶은 날짜를 사용자에게 물어 보아야 할 것이고 성적 관리 프로그램이라면 관리의 대상이 되는 성적을 입력받아야 할 것이다.

scanf(스캔에프라고 읽는다)는 사용자로부터 정보를 입력받는 기본 함수이다. printf의 반대 함수이며 동일한 서식을 사용한다. 즉 정수를 입력받고 싶으면 %d 서식을 사용하고 문자열을 입력받고 싶으면 %s 서식을 사용하면 된다. 단 실수 서식인 %f가 printf는 float, double에 모두 대응되는데 비해 scanf는 float와만 대응된다는 점만 다르다. scanf로 double값을 입력받으려면 %lf 서식을 사용해야 한다. scanf를 호출하면 화면에 커서가 나타나 깜박거리며 입력을 요구하는데 이 상태에서 사용자는 키보드를 통해 프로그램이 요구하는 정보를 입력하고 Enter키를 누르면 된다. 기본 형식은 다음과 같다.

 

scanf("서식문자열", &변수 [,&변수, ...]);

 

printf 와는 달리 서식 문자열에는 오로지 서식만 들어갈 수 있으며 서식 이외의 문자열은 넣어 봐야 무시된다. 입력받고자 하는 정보를 사용자에게 요구할 때는 scanf이전에 printf로 미리 어떤 정보를 입력하라는 안내 문자열(프롬프트라고 한다)을 출력해야 한다. 앞장에서 작성한 숫자 맞추기 게임의 소스를 보면 scanf의 사용예가 있다.

 

printf("숫자를 입력하세요(끝낼 때는 999) : ");

scanf("%d",&input);

 

printf 함수로 미리 어떤 값을 입력해 달라는 메시지를 출력하였다. 이때 개행 코드(n)를 출력하지 않아야 메시지 바로 다음 위치에서 입력을 받을 수 있다. 서식 문자열로 %d를 주어 정수값 하나를 입력받는다는 것을 표시했으며 이 값을 input이라는 변수에 대입하도록 했다. 문자를 입력받는다면 %c, 실수는 %f, 문자열은 %s 서식을 사용하면 된다.

이때 scanf로 입력받을 변수를 지정할 때 변수명앞에 & 연산자를 붙여야 한다. 이유는 변수의 값이 아닌 번지를 전달해야 scanf가 이 변수의 값을 변경할 수 있기 때문이다. 무척 복잡하게 들리겠지만 &연산자는 한참 후에나 살펴볼 수 있는 어려운 연산자이기 때문에 일단은 이해가 가지 않더라도 scanf로 값을 입력받을 때는 & 연산자를 변수명앞에 붙여야 한다는 것을 외워 버리도록 하자.

정수형 변수 a에 값을 입력받으려면 scanf("%d", &a), 실수형 변수 b에 값을 입력받으려면 scanf("%f", &b) 라고 호출하면 된다. 문자열의 경우는 입력받는 방법이 조금 다른데 아직 문자열 표현 방법을 배우지 않았으므로 다음에 기회가 될 때 설명하도록 하자. 다음 예제는 입출력 실습을 위한 예제이다. 두 개의 정수를 사용자로부터 입력받아 그 합을 출력한다.

 

: scanf

#include <Turboc.h>

 

void main()

{

     int a,b;

     int sum;

 

     printf("첫 번째 숫자를 입력하세요 : ");

     scanf("%d",&a);

     printf("두 번째 숫자를 입력하세요 : ");

     scanf("%d",&b);

     sum=a+b;

     printf("입력한 두 수의 합은 %d입니다.n",sum);

}

 

printf로 어떤 수를 입력하라는 안내 메시지를 먼저 출력하고 scanf로 정수값을 입력받아 a, b 변수에 저장했다. sum에 두 수의 합을 구하고 printf로 그 합을 출력하면 된다. 실행 결과는 다음과 같다.

 

첫 번째 숫자를 입력하세요 : 26

두 번째 숫자를 입력하세요 : 32

입력한 두 수의 합은 58입니다.

 

printf가 한꺼번에 여러 개의 변수를 출력할 수 있듯이 scanf도 여러 개의 변수를 한꺼번에 입력받을 수 있다. 서식 문자열에 여러 개의 서식을 작성하고 뒤쪽에 입력받을 변수도 서식 개수만큼 나열하면 된다. 다음 코드는 scanf 를 한 번 호출하여 두 개의 정수를 입력받는다.

 

printf("두 개의 숫자를 입력하세요 : ");

scanf("%d%d",&a,&b);

 

사용자는 두 정수를 공백, 개행 코드 등으로 분리해서 입력한다. printf와 마찬가지로 %와 서식 사이에 입력 형식을 지정하는 다양한 양식도 사용할 수 있다. 별로 어렵지는 않지만 여기서는 이런 것들에 대해서 굳이 설명하지 않고자 한다. 지금은 그래픽 환경의 윈도우즈 시대이고 그래픽 환경에서는 값을 입력하거나 선택하는 다양한 컨트롤들이 제공된다. 다음은 값을 입력받는 대화상자의 한 예이다.

입력받고자 하는 값의 성격에 따라 적합한 컨트롤들을 사용할 수 있으므로 훨씬 더 직관적이고 사용하기도 쉽다. 뿐만 아니라 scanf는 질문과 답변 형태로 값을 입력받지만 대화상자는 순서에 상관없이 입력할 수 있고 확인 버튼을 누르기 전에 마음대로 수정할 수도 있다. 키보드로 값을 타이프해서 입력하는 시대는 한참 전에 지났으며 그래서 도스용 프로그램을 작성하지 않는 한 scanf 함수로 값을 입력받아야 하는 경우는 거의 없다.

하지만 지금 C를 처음 배우는 사람들은 scanf 함수의 기본적인 사용 방법을 알아야 하는데 이 함수 외에는 콘솔 환경에서 값을 입력받을만한 적당한 방법이 없기 때문이다. 위에 보인 대화상자가 멋있어 보이겠지만 C문법을 처음 배우는 사람에게 저런 대화상자를 만드는 것은 너무 너무 어려운 기술이다. 그래서 당분간은 기본적인 입력을 scanf 함수로밖에 할 수가 없다.

지금 scanf 함수를 알아야 하는 이유는 실제 프로젝트에 이 함수가 필요해서가 아니라 문법 공부를 하는데 이 함수의 도움이 필요하기 때문이다. 요즘같은 그래픽 환경에서 이 함수는 실습용 이상의 의미를 부여하기 어렵다. scanf 함수를 실제로 사용해야 한다거나 더 자세한 사항을 알고 싶다면 레퍼런스를 참고하기 바라되 그렇지 않다면 정수값과 문자열을 입력받을 수 있는 정도의 사용법만 알아도 당장 실습하는데는 별 무리가 없을 것이다. scanf가 아니더라도 공부해야 할 것들이 얼마든지 많으므로 여기서 불필요하게 힘을 뺄 필요는 없다.

 


List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 890
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 762
C언어 소코반 리팩토링 푸쉬푸쉬 file 정체불명 2012.01.25 2573
기타 [파이썬] 파이썬 시작하기 )3( 2 file - 하늘 - 2009.09.05 2573
기타 게임을 처음 제작하시는 초심자 분들께 7 TheEK 2012.07.03 2560
C언어 락발라드 구구단~ file 정체불명 2009.05.02 2560
기타 [파이썬] 변수(변하는 수) )4( 4 - 하늘 - 2009.09.06 2559
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [열거형,정의] 제니스 2009.06.13 2558
기타 이런 옷은.. 처음이야 ! 패션 이미지들 3 file 꼴뚜기무침 2010.11.25 2551
기타 게임줄거리를 만들어볼까?!! 6 칼리아 2009.08.01 2522
기타 - 하늘 -의 리눅스 book! 리눅스를 배워보자! 5 - 하늘 - 2009.08.01 2515
기타 [VB6 강좌] 제2강 - 비주얼베이직과 인사하기 1 독도2005 2008.10.26 2515
기타 온라인 게임 서버의 구조도 4 file Saber 2010.09.06 2509
C언어 [C언어] 배열에 대해 1 [Dark].Angel 2009.01.14 2505
기타 유튜브 동영상 다운로드 하기 6 아방스 2010.11.03 2499
기타 [파이썬] if(만약 …이면) )8( 3 - 하늘 - 2009.09.10 2494
기타 프로그래밍 스킴 Scheme 4 "3두개 7두개로 24를 만들려면?" 프로그래밍으로 풀기 2 정체불명 2010.10.03 2479
기타 프로그래밍 스킴 7줄로 윈도우창에 그림을 출력하고 움직여보자. file 정체불명 2010.10.04 2477
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [확장열] 제니스 2009.06.13 2472
C언어 [C언어] 이스케이프 시퀸스 [Dark].Angel 2009.01.14 2472
기타 RPG-Builder 3D - 캐릭터 그래픽을 드래곤 으로 바꿔보자! 5 file 더블오렌지 2011.08.08 2464
그래픽1개를 다운받아서 2개로 사용방법 어두운동굴 2008.07.29 2442
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19