본문 바로가기
프로그래밍언어/C언어

키보드로부터 데이터 입력받기 - scanf()함수

by J코딩 2021. 8. 20.
반응형

printf() 함수는 필요한 데이터를 서식 문자에 맞게 모니터에 출력하는 표준 출력 기능을 제공했습니다. 모니터에 데이터를 출력하는 것은 알았으니, 키보드로부터 직접 데이터를 입력받을 수 있는 scanf() 함수에 관해서 공부하겠습니다.

 

키보드로부터 데이터를 입력 받는 것을 표준 입력,
모니터에 데이터를 출력하는 것을 표준 출력이라 한다.

데이터를 입력받을 때 사용하는 함수는 scanf() 함수입니다. 이 함수 역시 printf() 함수와 같이 stdio.h 헤더 파일에 정의된 표준 라이브러리 함수입니다. 따라서 이 함수를 사용하려면 printf() 함수와 마찬가지로 코드에 stdio.h 헤더 파일을 인크루드(include)해야 합니다.

 

scanf() 함수의 기본 구조

 

키보드로부터 데이터를 입력받은 후에 입력받은 데이터를 사용하고자 한다면 데이터를 저장해야 합니다. 이것은 scanf() 함수의 기본 기능 중 하나입니다. 예를 들어, 10진수 데이터를 하나 입력받아 저장하고자 한다면 이 함수를 다음과 같이 사용합니다.

 

scanf() 함수의 기본 구조

위 그림처럼 scanf()함수도 printf() 함수처럼 서식 문자를 사용합니다. scanf() 함수에서 사용하는 서식 문자는 입력받을 데이터의 타입을 결정하기 위해서입니다. 여기서 사용한 서식 문자 %d는 키보드를 통해서 10진수를 입력받는는 것을 의미합니다.

 

그리고 &a는 입력받을 값을 저장하는 임시 저장 공간과 관련되는데 다음 장에서 다룰 변수를 알아야만 합니다. 일단, 키보드로부터 입력받은 데이터를 a라는 이름의 변수(임시 저장 공간)에 저장한다고 생각합시다.

 

다음 예제를 가지고 지금까지 설명한 내용과 함께 scanf()함수의 사용법에 관해서 알아보겠습니다.

5행에서 int age는 변수입니다. 11행의 scanf() 함수에서 입력받은 데이터를 저장하기 위해 선언된 변수(임시 저장 공간)입니다. (int는 정수값만을 저장할 수 있는 타입)

7행에서 char word[5] 1행 5열의 임시 저장 공간을 갖고 있는 배열입니다.(char는 문자값을 저장할 수 있는 타입이며, [5]는 5행의 배열을 생성)

9행에서 printf() 함수로 "몇 살이에요?"라는 문자열을 출력합니다.

11행에서 키보드로부터 10진수 데이터를 입력받아서 age라는 변수에 저장하라는 의미입니다. 이때 반드시 변수 앞에 &를 붙여야 합니다.(여기서는 10진수 20을 age 변수에 저장)

13행에서 printf() 함수로 age에 저장되어 있는 값을 출력합니다.

 

"즉 age변수에 20을 저장한 후에 13행을 통해서 "진짜 20살 맞아요?"를 출력한다는 의미가 됩니다."

 

15행에서 printf() 함수로 "알고 싶은 경제용어는?"라는 문자열을 출력합니다.

17행에서 키보드로부터 문자4자 데이터를 입력받아서 word라는 변수에 저장하라는 의미입니다. 이때 반드시 변수 앞에 &를 붙여야 합니다.(여기서는 테이퍼링을 word 변수에 저장)

19행에서 printf() 함수로 "테이퍼링 뜻을 알고 싶었군요"라는 문자열을 출력합니다.

"즉 word변수에 테이퍼링을 저장한 후에 19행을 통해서 "테이퍼링 뜻을 알고 싶었군요"를 출력한다는 의미가 됩니다."

여기서 왜 scanf("%s", word)라고 하지 않고 scan("%s",&word)로 word 앞에 &를 붙여줄까요? 간단히 설명하자면 &word는 변수 word를 위해 할당된 메모리의 주소를 의미합니다. 따라서 scanf("%s",&word)라는 표현은 문자열 데이터를 입력받아서 변수 age의 메모리 주소에 입력값을 저장하라는 의미입니다. 여기서는 문자열 데이터가 테이퍼이 됩니다.

더 쉽게 일상에서 생각해 본다면, 우리가 택배(데이터)를 받을 때 주소를 통해 택배를 전달받는 것과 같습니다.

반응형

댓글