안녕하세요, 박사과정 모닝입니다.
오늘은 scanf_s() 함수를 사용해 숫자형 또는 문자열을 입력받는 방법을 정리해보도록 하겠습니다.
1. 정수형 또는 실수형 값(숫자형) 입력
정수형 또는 실수형의 숫자 데이터를 입력받기 위한 기본 코드는 아래와 같습니다.
scanf_s("표준 입력 형식 지정자", &변수명);
표준 입력 형식 지정자에서 어떤 데이터를 받을지를 지정하고, &변수명에 입력된 변수에 받은 데이터를 저장한다는 뜻입니다.
2. 문자 또는 문자열 값 입력
문자 도는 문자열을 입력 받기 위한 기본 코드는 아래와 같습니다. 주의할 점은, %c와 %s를 사용하여 문자 또는 문자열을 입력받을 때에는 반드시 길이를 넣어줘야 합니다. 길이를 입력하지 않으면 구문 오류가 발생합니다.
scanf_s("표준 입력 형식 지정자", &변수명, sizeof(변수명 또는 자료형));
3. 여러개의 변수를 사용하여 값을 입력받는 경우
예를 들어 변수를 2개 사용하여 값을 입력받는 경우, 아래의 예시와 같은 형식으로 사용할 수 있습니다. 다만, 입력받고자 하는 값이 문자나 문자열이 아리면 sizeof(변수명)은 생략할 수 있습니다.
int 변수명1, 변수명2;
scanf_s("%d %d", &변수명1, &변수명2, sizeof(변수명1), sizeof(변수명2));
또는 sizeof(변수명) 대신에 직접 자료형의 크기를 선언하여 사용할 수도 있습니다. 그러나 자료형의 크기를 항상 정확하게 알지 못하는 상황이 발생할수도 있기 때문에 sizeof(변수명)을 사용하는 것이 좋습니다.
4. 배열을 사용한 문자열 입력
배열을 사용한 문자열 입력 시에는 배열명이 곧 주소라는 점을 기억해야 합니다. 따라서 주소를 나타내는 & 문자를 붙일 필요가 없습니다.
char 배열명[ ];
scanf_s("표준 입력 형식 지정자", 배열명, sizeof(배열명));
문자열의 끝에는 항상 NULL('\0') 값이 자동으로 추가됩니다. 따라서 문자열을 처리하기 위해 배열을 사용할 때에는 반드시 사용하고자 하는 문자열의 크기보다 하나 더 크게 선언해야 합니다.
아래의 예시에서 배열을 사용하지 않는 경우와 사용하는 경우의 문자열 입력 코드를 비교해보겠습니다.
#include <stdio.h>
int main(void)
{
char ch; //문자형 변수 선언
char str[10]; //배열을 이용한 문자열형 변수 선언, NULL이 한자리 차지하므로 9자리까지 입력 가능
scanf_s("%c", &ch, sizeof(ch));
scanf_s("%s", str, sizeof(str)); //배열은 배열 이름 자체가 주소임
return 0;
}
5. scanf_s() 함수 연속으로 사용하기
scanf_s() 함수는 키보드로 데이터를 입력한 다음, Enter를 눌러야 값이 전달되는 버퍼형 표준 입출력 함수입니다. 반대로 키보드로 데이터를 입력한 다음 Enter를 누르지 않아도 값이 전달되는 함수를 직접형 표준 입출력 함수라고 합니다. 버퍼형 표준 입출력 함수인 scanf_s()의 특성상, scanf_s()를 연달아 사용할 때 문제가 됩니다. 먼저 입력받은 scanf_s의 입력을 완료할 때 누른 Enter 키가 아직 남아있기 때문에, 그 다음에 scanf_s 함수를 입력하면 앞서 누른 Enter키가 바로 입력되어 버립니다. 그래서 사용자는 아무런 키도 누르지 않았는데 입력이 완료된 것으로 처리됩니다. 이러한 상황을 방지하기 위해 Enter키를 처리(?)해주어야 합니다. 이때 사용되는 직접형 표준 입출력 함수가 getchar() 입니다. getchar 함수가 남아있는 Enter 키를 냠냠 처리해주기 때문에, 무사히 다음 scanf_s() 함수에서 새로운 값을 입력받을 수 있습니다.
다만, 이 문제는 %c 를 사용하여 문자형 변수를 입력받을 때에만 해당됩니다. 배열을 사용하는 경우(%s)는 마지막에 추가되는 NULL을 항상 확인하기 때문에, getchar() 함수를 통해 Enter를 처리해줄 필요가 없습니다.
'C' 카테고리의 다른 글
[C 언어] 식별자, 예약어, 변수, 변수 이름 - 코드 119 (0) | 2022.12.14 |
---|---|
아스키코드, ASCII -코드119 (0) | 2022.12.13 |
scanf, scanf_s 차이-코드119 (0) | 2022.12.13 |
printf() 함수로 숫자, 문자 출력하기, printf(), %d, %f, %s -코드119 (0) | 2022.12.13 |
[C 언어] printf, printf(), 표준 출력 함수 1-코드119 (0) | 2022.12.10 |