" />
본문 바로가기

프로그래밍/C언어

[잼민이도 이해하는 C언어 강의] 5. 입력하기 / #scanf

[잼민이도 이해하는 C언어 강의] 5. 입력하기 / #scanf

안녕하세요

 

정고리즘의 정고쌤입니다.

 

 

지난 강의 보러가기

 

지난 시간에는 데이터를 저장하는

변수라는 개념을 배웠습니다.

 


 

1. 데이터 입력하기

 

강의 진행 순서입니다.

2강에서 알아보았던 printf 출력 함수에 이어

데이터를 사용자로부터 입력받을 수 있는 입력 함수를 알아보겠습니다.

 


1. 데이터 입력하기

 

printf

원하는 내용을 출력할 수 있도록 해주는 출력 함수였습니다.

 

이를 통해 프로그램을 통해 연산한 결과를

사용자들에게 보여주며 다양한 프로그램을 만들 수 있게 됩니다.

 

이번에는 반대로 사용자들로부터 데이터를 입력받는

입력 함수에 대해서 알아보고자 합니다.

 

사실 데이터를 사용자로부터 입력받는 것은 매우 중요한 일입니다.

 

지금까지는 그저 프로그래머가 작성한 그대로

데이터를 출력할 뿐이었습니다.

 

흔한 게임을 생각해보아도 이런 식으로

프로그래머가 지정한 대로 처음부터 끝까지 자동으로 움직이는 게임은 없습니다.

 

프로그램은 사용자들로부터 데이터를 입력받고

프로그래머가 설계한대로 데이터를 적절하게 연산하고 처리하여

사용자들에게 원하는 결과물을 보여주어야 합니다.

 

게임도 마찬가지입니다.

사용자들에게 방향키나 마우스 우클릭 등

정보를 입력받으면 입력받은 데이터를 바탕으로

프로그래머가 설계한대로 캐릭터를 동작시켜

사용자들이 원하는 결과물을 보여주게 됩니다.

 


 

그럼 이제 입력 함수에 대해서 알아보겠습니다.

#include<stdio.h>
int main(void)
{
	int A;
	
	printf("정수 데이터를 입력하시오 : ");
	scanf("%d",&A);
	
	printf("%d",A);
	
	return 0;
}

 

입력 함수scanf() 입니다.

 

printf와 매우 유사하게 생겼고,

사용법도 유사합니다.

 

printf는 출력하고자 하는 데이터의 자료형에 따라

변환 문자를 사용했다면,

 

scanf는 입력받고자 하는 데이터의 자료형에 따라

변환 문자를 사용해야합니다.

 

그리고 반드시 먼저 변수가 선언되어 있어야합니다.

 

왜냐하면

입력받은 데이터를 변수에 저장해야되기 때문입니다.

변수가 없다면 입력도 받을 수 없습니다.

 

그리고 변수를 적을 때에는 printf와 달리

변수 앞에 &(엔퍼센트) 연산자를 꼭 적어야합니다.

 

 

코드를 컴파일 하면 아래 화면에서더 이상 작동되지 않을 것입니다.

입력을 받아야 하기 때문입니다.

 

printf("정수 데이터를 입력하시오 : ");

까지는 출력하였지만

scanf를 만나서 데이터를 입력해주어야하기 때문입니다.

 

화면에 10을 입력해봅시다.

 

scanf("%d",&A); 에 의해서

10은 A 변수에 입력됩니다.

 

따라서 printf("%d",A); 를 통해

A에 입력하였던 10이 출력되게 됩니다.

 


이번에는 이렇게 코드를 작성해 봅시다.

#include<stdio.h>
int main(void)
{
	int A;

	scanf("정수 데이터를 입력하시오 : %d",&A);
	
	printf("%d",A);
	
	return 0;
}

 

위 코드는 잘못된 예제입니다.

 

초보자분들이 많이 실수하는 부분 중 하나이기도 합니다.

printf는 출력을 위한 출력 함수,

scanf는 입력을 위한 입력 함수입니다.

 

위 코드에서는 scanf가 입력이 아닌

출력을 목적으로한 "정수 데이터를 입력하시오 : "라는 내용을 출력하려 하고 있습니다.

 

컴파일까지는 가능하지만

실행하여 작동시켜보면 정상적으로 작동되지 않을겁니다.

 

printf와 scanf의 역할에 주의하며

코드를 작성하여야 합니다.

 

 


이번에는 아래의 코드를 작성해보겠습니다.

#include<stdio.h>
int main(void)
{
	int A;
	double B;

	printf("정수와 실수를 입력하시오 : ");
	scanf("%d %lf",&A,&B);
	
	printf("%d %.2lf",A,B);
	
	return 0;
}

 

printf에서도

변환 문자를 여러 개 사용하여 2개 이상의 데이터를 동시에 출력하는 것이 가능했었습니다.

 

scanf에서도 마찬가지로

변환 문자를 여러 개 사용하여 2개 이상의 데이터를 동시에 입력받는 것이 가능합니다.

 

 


이번에는 문자와 문자열도 입력받아 봅시다.

#include<stdio.h>
int main(void)
{
	char A;
	char B[10];

	printf("문자를 입력하시오 : ");
	scanf("%c",&A);
	
	printf("문자열을 입력하시오 : ");
	scanf("%s",B);
	
	printf("%c %s",A,B);
	
	return 0;
}

 

문자와 문자열을 입력받는 것도

변환 문자만 제외하면 정수나 실수를 입력받는 것과 동일합니다.

 

그러나 문자열을 입력받을 때에는 주의해야 될 점이

몇 가지 있습니다.

 

 

1. 문자열 변수는 앞에 &를 붙이지 않습니다.

 

scanf를 사용할 때에는 변수 앞에 반드시 & 연산자를 써야된다고 했습니다.

그러나 코드에서도 보이지만

문자열의 경우 & 연산자를 붙이지 않습니다.

 

그 이유는 추후 포인터 강의에서 자세히 설명하겠습니다.

 

2. 문자열 변수의 [ ] 문자 개 수에 유의합시다.

 

4강에서 문자열 변수에 대해서 설명했었습니다.

그때 문자열은 변수 타입 char를 사용하고,

변수 이름 뒤에 [ ]를 붙여 저장할 문자열의 최대 길이를

꼭 지정해야 된다고 했습니다.

 

입력을 받을 때에도 마찬가지입니다.

혹여 [ ]보다 더 긴 길이의 문자열을 입력 받는다면

에러가 나며 정상적으로 작동되지 않습니다.

 

3. 띄어쓰기는 입력할 수 없습니다.

 

scanf 입력함수를 통해 문자열을 입력받을 때에는

띄어쓰기를 입력받을 수 없습니다.

 

"띄어쓰기도 포함해서 입력을 받고 싶을 때에는 어떻게하면 되나요?"

 

이 대답은 추후 배열 강의에서 이어가겠습니다.

 


 

문자열은 이렇듯

정말 탈이 많은 녀석입니다.

 

문자열 변수가 이렇게 다른 자료형의 변수와 달리

복잡한 규칙과 특징들이 있는 이유도 역시

배열 강의에서 이어 설명하겠습니다.

 

 


오늘은 printf 출력 함수에 이어

scanf라는 입력 함수에 대해서 배워보았습니다.

 

데이터를 입력한다는 것은 프로그램에 있어

정말 중요한 부분입니다.

 

다음 가능에서는 입력된 데이터를

가공하고 연산하여 사용자가 원하는 결과를 만드는 방법에 대해서

알아보도록 합시다.