-
반응형
표준입력함수란
다양한 입력 장치 중에 사용하는 시스템이 가장 기본으로 생각하는 장치
표준 입력 함수(Standard Input Function) : 표준 입력 장치로부터 데이터를 입력 받기 위해 제공되는 함수
표준 입력 함수는 장치의 입력을 읽는 것을 파일에서 데이터를 읽는 것처럼 구성한다.
입력 값을 임시로 저장하는 표준 입력 버퍼
표준 입력 버퍼 : 특정 키를 누를 때까지 사용자 입력을 임시로 저장하는 메모리
운영체제가 표준 입출력을 사용하는 시스템을 위해 표준 입력 버퍼(메모리)를 제공- 입력 버퍼는 특정 키를 누를때까지 사용자 입력을 임시로 저장
- 표준입력함수를 사용할 때 사용자가 입력한 정보들을 모두 사용하지 않으면, 다음 입력 함수 호출 시에 입력 버퍼에 남겨진 정보들이 사용됨
입력 버퍼를 초기화하는 rewind 함수
- stdin 포인터와 rewind 함수를 사용하여 표준 입력 버퍼에 남아있는 정보를 모두 지울 수 있다.
- 표준 입력 함수 호출 시에 사용자가 잘못된 값을 입력하여 입력 버퍼에 정보가 남아있는 경우 rewind 함수를 이용하면 다음 표준 입력 함수 호출 시에 영향을 미치지 않는다.rewind(stdin); // rewind 함수를 사용하면 입력 버퍼를 초기화할 수 있음
문자 한 개를 입력받는 getchar 함수
getchar 함수는 키보드(컴퓨터의 표준 입력 장치)로부터 문자 하나를 입력받는 표준 입력 함수
문자 한 개를 입력받더라도 Enter 키를 눌러야만 작업이 완료됨
#include <stdio.h> void main() { int input_data; // 표준 입력함수를 사용하여 문자를 한 개 입력 input_data = getchar(); // 입력받은 문자를 출력 printf(“input : %c\n”, input_data); }
getchar 함수를 사용할 때 주의할 점
#include <stdio.h> void main() { int input_data; // 표준 입력함수를 사용하여 문자를 한 개 입력 input_data = getchar(); printf(“first input: %c \n”, input_data); // 입력받은 문자를 출력 input_data = getchar(); printf(“second input: %c \n”, input_data); // 입력받은 문자를 출력 }
getchar 함수를 사용할 때 주의할 점 – 해결방법 1
- 사용자가 반드시 한 번에 한 개의 문자만 입력하고 Enter키를 누른다고 가정
- getchar 함수를 한번 더 호출하여 Enter 키 값을 제거
- 사용자가 한 번에 한 개의 문자만을 입력하지 않으면 문제 해결 불가
int input data; input_data = getchar(); // 정상적으로 문자 입력 getchar(); // 엔터 키 값을 제거 printf(“first input : %c \n”, input_data); input_data = getchar(); // 정상적으로 문자 입력 getchar(); // 엔터 키 값을 제거 printf(“second input : %c \n”, input_data);
getchar 함수를 사용할 때 주의할 점 – 해결방법 2
- 사용자가 입력한 한 개의 문자 외에 다른 문자들이 입력 버퍼에 남앗 ㅓ생기는 문제를 근본적으로 해결해야 함
- 입력 버퍼를 초기화하여 남아있는 문자들을 모두 제거히여 문제 해결
#include <stdio.h> void main() { int input_data = getchar(); // 한 개의 문자를 입력 rewind(stdin); // 표준 입력 버퍼에 있는 모든 입력 값을 제거 printf(“first input: %c \n”, input_data); // 입력받은 문자를 출력 input_data = getchar(); rewind(stdin); // 표준 입력 버퍼에 있는 모든 입력 값을 제거 printf(“second input: %c \n”, input_data); // 입력받은 문자를 출력 }
getc 함수
- 표준 입력 장치를 의미하는 stdin을 인자로 넘겨주면 하나의 문자를 입력
파일 포인터를 인자로 넘겨주면 파일에서 1바이트 정보를 입력
인자 없이 표준 입력 장치에서 입력을 받는 기능만 제공하는 것이 getchar 함수
getc 함수를 이용하여 getchar 함수를 만듬
문자열을 입력 받는 gets 함수
gets 는 get string의 줄임말
문자열을 입력받는 표준 입력 함수
Enter키를 입력할 때까지 입력한 모든 문자를 하나의 문자열로 봄
char input_string[10]; gets(input_string);
// gets 함수로 문자열 입력받기 #include <stdio.h> void main() { char input_string[10]; gets(input_string); printf(“input: %s\n”, input_string); }
- gets 함수는 입력 버퍼에 Enter 키가 남지 않는다
- gets 함수로 입력 받은 문자열에는 Enter키를 입력한 위치에 NULL 문자 0이 추가된다
gets 함수에서 사용자 키 입력 취소하기
- 표준 입력을 받는 중에 ctrl+c 키를 입력하면 표준 입력이 취소되고 프로그램을 중지함
- 사용자가 정상적으로 입력을 완료하지 않은 상황에 대처할 수 있도록 코드를 구성해야 함
- gets 함수의 반환값을 이용하여 사용자의 입력이 정상적으로 완료되었는지 확인 가능
// gets 함수로 문자열을 입력 받을 때 입력 취소까지 처리하기 #include <stdio.h> void main() { char input_string[10]; // 반환값이 NULL이 아니면 문자열을 입력 받아 input_string에 저장 if (NULL != gets(input_string)) { printf(“input: %s\n”, input_string); } else { printf(“input -> Canceled\n”); } }
gets 함수에서 키 입력 횟수 제한하기
- gets 함수는 자신이 예상한 길이보다 더 긴 문자열이 입력되면 프로그램이 비정상적으로 죵로된다
- gets 함수와 비슷한 함수를 직접 만들어 문제를 해결
// gets 함수로 문자열을 입력 받을 때 키 입력 횟수 제한하기 #include <stdio.h> int GetMyString(char buffer[], int limit) { for ( int i = 0; i < limit; i++) // 입력 가능 최대 개수만큼 반복 { buffer[i] = getchar(); if(buffer[i] == “\n”) { buffer[i] = 0; // 엔터 키 위치에 0을 넣어 문자열을 완성 return 1; // 정상적으로 입력이 완료 } } buffer[i]=0; rewind(stdin); // 표준 입력 버퍼에 남아있는 문자들을 제거 return 0; // 입력 초과 현상이 발생했음을 알림 } void main() { char input_string[10]; int state = GetMyString(input_string, 9); if(state == 1) printf(“input : %s\n”, input_string); // 정상 입력 else printf(“input: %s -> out of range\n”, input_string); // 범위 초과 }
반응형'C' 카테고리의 다른 글
문자열을 정수로 변환 (0) 2022.05.20 void * 형 포인터 (0) 2022.05.18 포인터와 대상의 크기 (0) 2022.05.17