와드의 블로그

14. 표준 입력 함수 본문

프로그래밍 언어/C

14. 표준 입력 함수

Ward 2021. 9. 16. 03:08

(1) 표준 입력 함수

 

* 표준 입력 함수란?

표준 입력 함수는 시스템의 여러 가지 입력 장치를 표준화하기 위해, 장치의 입력 정보를 읽는 것을 컴퓨터가 파일에서 데이터를 읽는 것처럼 구성한다. 입력되는 값들을 하나씩 바로 처리하는 것이 아니라 일정한 조건이 될 때까지 모았다가 처리한다.

 

* 표준 입력 버퍼

특정 키를 누를 때까지 사용자 입력을 임시로 저장하는 메모리를 표준 입력 버퍼라고 한다.

입력 버퍼의 초기화: 여러 개의 정보를 입력하고 특정 키를 눌렀는데 입력 버퍼에 있는 내용을 전부 사용하지 않았다면 입력 버퍼를 초기화해 줘야 한다. rewind 함수를 이용하면 입력 버퍼를 초기화할 수 있다.

 

(2) 문자와 문자열 입력 함수

 

* 문자 한 개를 입력 받는 getchar 함수

include <stdio.h>

int main()
{
	char data;
	data = getchar();
	printf("%c", data);

	return 0;
}

getchar 함수를 사용할 때 주의할 점: getchar 함수를 여러 번 사용하면 하나의 getchar함수를 호출한 뒤에 입력 버퍼를 초기화해 주어야 한다.

getc 함수: getchar과 동일한 기능을 하지만 표준 입력으로 사용하려면 stdin을 인자로 넘겨줘야 한다. 파일 입출력에도 사용된다.

 

* 문자열을 입력받는 gets 함수

gets 함수는 엔터키를 입력할 때까지 입력한 모든 문자열을 하나의 문자열로 입력받는다. 문자열을 변수에 저장하기 위해서는 변수의 시작 주소를 인자로 넘겨줘야 한다.

#include <stdio.h>

int main()
{
	char str[10];
	gets(str);
	printf("%s\n", str);

	return 0;
}

 

(3) 문자열을 정수로 변환하기

 

* 문자열을 정수로 변환해 사용하기

gets 함수는 문자열을 입력받는 함수이기 때문에 "12345"와 같이 숫자 형태로 입력하더라도 정수가 아닌 문자열로 인식한다. 이러면 산술 연산을 하는데 어려움이 있다. gets 함수로 입력받은 값을 가지고 산술 연산을 하려면 문자열을 정수 값으로 변환해서 사용해야 한다.

 

* 문자열을 정수로 변환하기'

첫 번째 방법

#include <stdio.h>

int main()
{
	int pos_num = 1, num = 0;
	char str[4] = "123";

	for (int i = 2; i >= 0; i--) {
		int tmp = str[i] - '0';
		num += tmp * pos_num;
		pos_num *= 10;
	}

	printf("%s -> %d", str, num);

	return 0;
}

두 번째 방법

#include <stdio.h>

int main()
{
	int num = 0, cnt = 0;
	char str[4] = "123";

	while (str[cnt] != NULL) {
		num *= 10;
		num += str[cnt] - '0';
		cnt++;
	}

	printf("%s -> %d", str, num);

	return 0;
}

 

* atoi 함수를 이용하여 문자열을 정수로 변환하기

atoi 함수는 C 언어 표준 라이브러리에서 제공하는 문자열을 정수로 변환하는 함수이다.

#include <stdio.h>
#include <stdlib.h> // atoi 함수를 사용하면 stdlib.h를 include해야 한다.

int main()
{
	int n1, n2;
	char str1[10], str2[10];

	printf("input first number: ");
	gets(str1);
	printf("input second number: ");
	gets(str2);

	n1 = atoi(str1);
	n2 = atoi(str2);

	printf("%d + %d = %d\n", n1, n2, n1 + n2);

	return 0;
}

 

(4) 표준 입력 함수 scanf

 

* 만능 표준 입력 함수 scanf

scanf 함수는 다양한 키워드를 사용하여 문자나 문자열뿐만 아니라 정수, 실수까지 모두 입력받을 수 있도록 형식화된 입력을 제공한다. scanf는 형식 지정 키워드를 사용하여 입력 받을 값의 형식을 지정한다.

#include <stdio.h>

int main()
{
	int n;

	printf("정수를 입력하세요: ");
	scanf("%d", &n);
	printf("%d\n", n);

	return 0;
}

 

* scanf 함수에서 & 연산자를 사용하는 이유

scanf함수는 한 번의 함수 호출로 여러 개의 값을 입력받을 수 있도록 만들어 졌기 때문에 return의 사용이 불가능하다. 따라서 포인터가 꼭 필요하다.

 

* scanf 함수에서 입력된 값을 구분하는 방법

scanf 함수도 표준 입력 함수이기 때문에 엔터키를 눌러야 입력이 끝난다. 하지만 사용자가 한 번에 여러 개의 데이터를 입력할 수 있기 때문에 입력 값의 구별은 엔터키로도 할 수 있고 공백 문자로도 가능하다.

 

* scanf 함수로 문자열을 입력 받을 때 주의할 점

scanf 함수가 엔터키와 공백 문자를 사용하여 입력을 구분하다 보니 공백이 포함된 문자열은 입력을 받지 못하는 문제가 발생한다. 따라서 공백이 포함된 문자열을 입력받고 싶으면 gets 함수를 사용하는 것이 좋다.

 

 참조문헌: C언어 입문

'프로그래밍 언어 > C' 카테고리의 다른 글

16. 메모리 할당  (0) 2021.09.17
15. 배열과 포인터  (0) 2021.09.17
13. 포인터  (0) 2021.09.16
12. 배열과 문자열  (0) 2021.09.14
11. 지역 변수와 전역 변수  (0) 2021.09.12