C 언어 - 표준 입력

컴퓨터/C

728x90
반응형

표준 입력(Standard In)

프로그램을 만들어서 사용자가 컴퓨터에게 효율적으로 일을 시키기 위해서는 특정 상황에 따라 명령을 해야 됩니다. 

이렇게 컴퓨터에게 데이터를 주는 장치는 입력 장치라고 일컫습니다. 

 

입력장치에는 대표적으로 키보드,마우스,마이크등이 있습니다.

그중 C언어에는 프로그램의 표준 입력 장치를 키보드로 지정하고 있습니다. 본글에서는 C언어에서 키보드의 값을 받는 방법에 대하여 알아보도록 하겠습니다.

1. 소스코드에 Stdio.h 추가하기

표준 입력을 하기 위해서는 표준 입출력 라이브러리를 추가해야 됩니다. 그러기 위해서 그 라이브러리의 헤더 파일을 추가해야 됩니다. 지난 글들에 예제에 항상 들어가 있던 내용입니다.

Standard input output의 약자로 stdio.h를 추가해 주어야 합니다. 

표준 입출력의 함수를 사용하기 위해서는 작성하는 소스코드에 아래 형식대로 추가가 필요합니다.

#include<stdio.h>  //표준입출력 라이브러리 헤더파일 추가 적용하는 형식

2. 표준 입력 함수 알아보기

표준 입출력 라이브러리 안에 함수의 형태로 입력을 하기 위한 소스코드에 대하여 알아보겠습니다.

 

2.1 getchar()함수

문자를 입력받는 함수입니다. 하나의 문자를 입력받는 함수이며 키보드 버퍼의 가장 첫 번째 저장된 값을 불러옵니다.

\n 즉 엔터를 통해 키보드 버퍼의 마지막을 알립니다.

예제 1) 기본 형태

#include <stdio.h>

int main()
{
	char word;
	printf("문자를 입력하세요 : ");
	word = getchar();
	printf("word 변수에 입력된 값은 %c 입니다.", word);
}

결과 보기

더보기

항상 키보드 버퍼에 저장된 처음 값을 추출합니다.

키보드 버퍼란? -키보드의 입력값을 임시로 받아 저장하고 있는 공간

 

예제 2) 응용 예제 (키보드 버퍼로 인한 에러 발생)

C언어에서 문자는 숫자이므로 아래와 같은 표현 또한 가능합니다.

#include <stdio.h>

int main()
{
	char word;

	printf("문자를 입력하세요 : ");
	word = getchar();
	printf("word 변수에 입력된 값의 char : %c 입니다.\n", word);
	printf("word 변수에 입력된 값의 int : %d 입니다.\n", word);



	int num;
	printf("숫자를 입력하세요 : ");
	num = getchar();
	printf("num 변수에 입력된 값의 char : %c 입니다.\n", num);
	printf("num 변수에 입력된 값의 int : %d 입니다.\n", num);

}

결과 보기

더보기

예상했던 결과와는 조금 다른 것을 확인할 수 있습니다 
이유는 키보드 버퍼는 엔터의 명령어도 저장을 하기 때문입니다.

순서대로 정리하자면 
문자 A 입력 - 엔터 
키보드 버퍼에 저장된 2가지 A와 엔터
즉 변수 word에는 A가 들어가고
    변수 num에는 엔터가 들어갔습니다.  그 증거로 num의 정수는 10이 나오고 있습니다
아스키코드 10번은 줄 넘김이라는 것 또한 예상을 할 수 있습니다.

예제 3) 응용 예제 (극복 방법)

버퍼를 지우는 함수를 사용 - rewind(stdin);

#include <stdio.h>

int main()
{
	char word;

	printf("문자를 입력하세요 : ");
	rewind(stdin);
	word = getchar();
	printf("word 변수에 입력된 값의 char : %c 입니다.\n", word);
	printf("word 변수에 입력된 값의 int : %d 입니다.\n", word);



	int num = 0;
	printf("숫자를 입력하세요 : ");
	rewind(stdin);
	num = getchar();
	printf("num 변수에 입력된 값의 char : %c 입니다.\n", num);
	printf("num 변수에 입력된 값의 int : %d 입니다.\n", num);

}

결과 보기

더보기

다양한 방법의 키보드 버퍼의 초기화가 있으니 찾아보는 걸 권장합니다. 

(사실 자주 쓰이지 않는 입력 방법)

 

우리는 숫자를 1 입력했지만 컴퓨터의 입장에서는 숫자 49로 인식하고 있는 것을 확인할 수 있습니다.
문자를 받는 입력 함수를 사용했기 때문에 문자 1을 입력받아서 저장했기 때문입니다.

 

2.2 gets()함수 (gets_s)

문자열을 입력받는 함수 입니다. 엔터값까지 문자열에 포함이 되는 함수 입니다. 따라서 gets의 함수 종료시 키보드 버퍼에는 아무것도 없습니다.

 

예제 1) 기본 형태

#include <stdio.h>

int main()
{
	
	char a[20] ;
	printf("문장을 입력하세요 : ");
	gets_s(a,sizeof(a));
	printf("a의 출력 : %s", a);
}

a[20]이란 char형 변수 20개를 묶어 놓은 배열의 형태 입니다. 추후에 좀더 자세히 다루도록 하겠습니다.

gets_s는 gets와 동일한 함수지만 조금더 안전성을 높인 함수라고 생각하시면 됩니다. 이또한 추후에 더 자세히 다루도록 하겠습니다.

결과 보기

더보기

 

예제 2) 키보드 버퍼에 대한 확인

#include <stdio.h>

int main()
{
	
	char a[20] ;
	printf("문장을 입력하세요 : ");
	gets_s(a,sizeof(a));
	printf("a의 출력 : %s\n", a);

	char b[20];
	printf("문장을 입력하세요 : ");
	gets_s(b, sizeof(b));
	printf("b의 출력 : %s\n", b);
}

결과 보기

더보기

결과와 같이 키보드 버퍼에 대한 제어가 필요 없습니다.

2.3 scanf() - 포맷형 입력 함수 또는 만능 입력 함수 (scanf_s)

서식 지정자를 통해서 다양한 형태의 숫자,문자 등을 입력받을 수 있습니다. scanf와 scanf_s또한 동일한 역할을 합니다.

 

예제 1) 기본

#include <stdio.h>

int main()
{
	int num;
	
	

	printf("입력 값(정수) : ");
	scanf_s("%d", &num);
	printf("정수 : %d\n", num);
}

결과 보기

더보기

scanf 또는 scanf_s에 서식을 지정한 후 변수를 넣을때는 &가 필요합니다. 이에 대한 자세한 내용은 후에 다시 서술하겠습니다. 오늘은 입력함수 scanf를 써보는 것에 목적을 가지도록 합시다.!

예제 2) 한번에 여러개 받기

#include <stdio.h>

int main()
{
	int num;
	char word;
	

	printf("입력 값(정수,문자) : ");
	scanf_s("%d %c", &num,&word);
	printf("정수 : %d\n%c\n", num, word);
}

결과 보기

더보기

엔터 또는 띄어쓰기로 구분을 해서 연속적으로 사용 또한 가능 합니다.

 

본문 내용에서는 간략하게 기본 입력을 받기위해서 C언어에서 기본적으로 제공하는 함수에 대하여 간략하게 알아보았습니다. 앞으로 내용을 배워가면 왜 이런 구조로 사용되는지 자연스럽게 이해하게 될겁니다.

 

728x90
반응형

'컴퓨터 > C' 카테고리의 다른 글

C 언어 - 중간 정리  (0) 2021.06.02
C 언어 - 조건문 switch  (0) 2021.06.02
C 언어 - if ~ else if ~ else  (0) 2021.05.31
C 언어 - 조건문 if else  (0) 2021.05.30
C 언어 - 조건문 IF  (0) 2021.05.29

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :