본문 바로가기
컴퓨터

[C언어] 표준 입력 함수( getchar() , getche(), getch(), gets(), scanf() )

by Luyin 2012. 8. 1.

* 문자 입력함수

1. getchar()

=> stdio.h 존재.

=> Enter : 입력종료 + Enter값도 \n 값으로 키보드 버퍼(KeyBoard Buffer)에 저장.

=> Space : 공백으로 입력처리.

=> 단점 : getchar()로 숫자를 입력받을때, 두자리 숫자를 못받는다. 12를 1과 2로 따로 인식해 버린다.

=> 키보드 버퍼(KeyBoard Buffer)로 부터 입력을 받음. fflush(stdin) 필요.

=> Enter가 입력될 때 까지 키보드 입력값들을 계속해서 키보드 버퍼(KeyBoard Buffer)에 저장.

=> 키보드 버퍼에 존재하는 data중에서 버퍼 포인터가 위치한 곳으로부터 1byte 분량을 꺼내오고 버퍼 포인터를 1byte 만큼 이동시키는 함수이다.


ex) 

처음 char ch = getchar()가 실행되어 키보드로 123 53 + Enter를 입력하면

KeyBoardBuffer : 123 53\n 값이 저장된다.


이 때, 

다시 getchar()하면 2 가 나오고

다시 getchar()하면 3

다시 getchar()하면 ' '

다시 getchar()하면 5

다시 getchar()하면 3

다시 getchar()하면 \n 가 나온다.


void test()
{
	char ch1, ch2;
	printf("첫번째 문자 데이터를 입력하세요.");
	ch1 = getchar();
	fflush(stdin); // 키보드 버퍼를 모두 비워주는 함수
	printf("두번째 문자 데이터를 입력하세요.");
	ch2 = getchar();
	printf("첫번째 문자 = %c , 두번째 문자 = %c 입니다. \n",ch1,ch2);
}

2. getche()

=> conio.h 존재.

=> Enter : 입력종료

=> space : 공백으로 입력처리

=> 키보드 버퍼를 사용하지 않아 getchar() 함수보다 속도가 빠른 문자 입력 함수이다.

=> Enter를 입력하지 않아도 키보드로 문자를 하나 입력하면 바로 입력이 끝나버린다.


void test()
{
	char kor, eng;
	printf("국어 점수를 입력하세요. ");
	kor = getche();
	printf("영어 점수를 입력하세요. ");
	eng = getche();
	printf("국어 = %c , 영어 = %c 입니다. \n", kor,eng);
}


3. getch()

=> getche()함수와 기능은 동일하다.

=> 입력 문자가 보이지 않는다.(보안용)

=> getche()와의 차이점 : 입력한 문자가 보이는 것과 안보이는 차이.


* 문자열 입력함수

1. gets()

=> stdio.h 존재.

=> Enter : 입력종료 , 키보드 버퍼(KeyBoard Buffer), 문자열 에 저장되지 않음

=> space : 공백으로 입력처리, 문자열에 포함.

=> 이용 : 키보드 버퍼에 Enter 값이 있을 경우, Enter 값을 문자열 Data로 취급하여 null값으로 변환하여 문자 끝에 저장하고 키보드 버퍼 포인터를 enter값 뒤로 이동 시킴.

=> 단점 : 문자열 변수의 길이보다 긴 글자들을 입력하면 시스템에 문제가 발샐할 수 있음.

=> char형 크기가 정해진 배열만 사용가능, char * 사용불가능


int main(void)
{
	char input[50];
	gets(input);

	printf("문자열 입력값은 : %s", input);
	return 0;
}


* 숫자 입력함수

1. scanf()

=> stdio.h 존재.

=> Enter : 

1) 숫자 : 입력종료.

2) 문자열 : 입력종료.

3) 문자 : 입력종료 + \n로 취급.

=> space : 여러 숫자 입력시 구분자로 처리.

=> 동시에 여러 숫자 입력 가능

=> 자리수를 지정하여 입력 받을 수도 있다.

=> 입력 장치로부터 숫자, 문자, 문자열 등의 데이터를 입력서식(변환문자)을 이용하여 읽어 들이는 함수.

=> 형식 : scanf("구분 문자 및 입력 서식들", &변수, 배열일 경우 배열명);

=> 키보드 버퍼에서 Data를 읽어 들인 후에 버퍼 포인터를 엔터 값 뒤로 이동시켜 주지 않으므로 문자 변수에 Data를 받을 경우 주의하여야 한다.


int main(void)
{
	int input1, input2;
	scanf("%d, %d", input1, input2);

	printf("숫자 입력값은 각각 1st : %d, 2nd : %d", input1, input2);
	return 0;
}