안녕하세요. BlockDMask입니다. scanf나 scanf_s나 기본은 똑같으니, scanf_s를 쓰시는 분들도 scanf의 사용법을 알면 도움이 될 것입니다. <목차>1. scanf 함수란?2. scanf 함수 예제3. scanf 엔터 처리 방법1. C, C++ scanf 함수 설명1-1) 헤더 파일 및 함수 모양- 헤더파일 - 함수의 모양 scanf 함수는 표준입력 (stdin)에서 형식화된 데이터를 읽는 함수입니다. 조금 더 쉽게 설명하면 첫 번째 매개변수의 형식에 맞게 데이터를 입력받는데, 그 데이터 들은 두 번째 세 번째.. N번째 매개변수로 들어온 변수에 저장을 합니다. - 첫 번째 매개변수 "입력받을 문자의 서식" 예를 들면 변수 num에 숫자 1개를 입력받고 싶다면 만약 변수 num1, num2에 숫자를 1개씩 총 2개를 입력받고 싶다면 이와 같이 첫 번째 매개변수는 사용자에게 어떤 식으로 입력을 받을 것인지 무엇을 입력받을 것인지 정해주는 부분입니다. - 두 번째, 세 번째... N 번째 매개변수 즉, 첫 번째 매개변수에서 설정한 입력받을 값의 수에 따라 몇개가 올지 정해집니다. 위에서 보신 바와 같이 첫번째 매개변수에서 숫자를 받을 %d가 1개이면 뒤에 이어서 오는 매개변수가 1개가 옵니다. 반면 이처럼 맨 첫 번째 매개변수에서 몇 개를 입력받을 것인지 정함에 따라서, 그 개수만큼 두 번째 세 번째... N번째 매개변수가 오게 됩니다. - 반환 값 int 1-2) scanf 함수에서 사용하는 서식 문자그럼 첫 번째 인자로 오는 "입력받을 문자의 서식"에서 특별한 기능을 하는 문자들이 있습니다. 숫자 형태를 받을 것인지 문자형태를 받을것인지 문자열을 받을 것인지를 구분을 해서 받아야 합니다. 그렇게 약속해 놓은 문자들을 서식 문자라고 합니다. %d : int 타입 정수형 %c : char 타입 문자형 %s : char* 타입 문자열 %lf : double 타입 실수 %f : float 타입 실수 1-3) scanf 함수에서 &의 의미변수 앞에 &를 붙이게 되면 이는 해당 변수의 주소를 가리키게 됩니다. int a; 라는 변수가 있다면 &a는 a의 주소를 가리킵니다. scanf에서 두 번째 인자부터는 데이터를 받아들일 변수를 집어넣는데, 이때 &를 붙여서 변수의 주소를 가리키게 합니다. 그렇기 때문에 일반 변수들을 보낼 때는 &을 붙여서 주소를 보내도록 하고 (call by reference). 배열의 이름과 같이 &를 붙이지 않아도 주소를 가리키는 것들은 &를 떼고 인자로 넣어주면 됩니다. 예를 들면 아래와 같이 변수와 배열이 존재한다고 했을 때, 변수는 scanf("%c", &a)을 넣어야 하고 **C언어에서 scanf 를 하다 보면 보안 경고가 뜰 때가 있습니다. 이 경고는 scanf와 같이 _s가 붙지 않은 함수보다는 scanf_s와 같이 입력받을 데이터의 사이즈를 입력하는 _s류 함수를 사용하라는 경고입니다. 2. C, C++ scanf 함수 예제2-1) scanf 예제 - 정수 입력#define _CRT_SECURE_NO_WARNINGS printf("입력한 숫자는 : %d 입니다.", num); csscanf("%d", %num)과 같이 int 타입의 숫자를 입력받을 때는 %d의 서식기호를 사용하면 됩니다. 2-2) scanf 예제 - 문자 입력#define _CRT_SECURE_NO_WARNINGS printf("입력한 문자는 : %c 입니다.", c1); cschar 타입의 문자를 입력 받을 때는 %c의 서식 문자를 이용하면 됩니다. 2-3) scanf 예제 - 문자열 입력#define _CRT_SECURE_NO_WARNINGS printf("입력한 문자는 : %s 입니다.", arr); cschar* 타입, char[] 타입의 문자열을 입력받을 때는 %s 서식 기호를 사용합니다. 2-4) scanf 예제 - 정수 두 개 입력#define _CRT_SECURE_NO_WARNINGS printf("숫자 두개 입력. 숫자, 숫자 형태 : "); printf("입력한 숫자 2개는 : %d와 %d입니다.\n", a, b); printf("\n숫자 두개 입력. 숫자 숫자 형태 : "); printf("입력한 숫자 2개는 : %d와 %d입니다.\n", c, d); cs이렇게 %d를 이용해서 똑같이 숫자를 두 개 받는다고 해도 scanf("~~", ) 해당 함수에 첫 번째 인자에 만들어 놓은 형태를 잘 맞추어서 입력하셔야 합니다. 2-5) scanf 예제 - while 문 안에서 입력#define _CRT_SECURE_NO_WARNINGS #include // C언어 bool 타입 printf("입력한 문장 : %s\n\n", str); cs이렇게 while 무한루프를 통해서 scanf를 계속해서 받을 수 있습니다. C언어에서 bool 타입의 사용법이 궁금하시다면 [바로가기] 해당 포스트로 가시면 됩니다. 이상으로 C언어, C++에서 사용자 입력을 받는 scanf 함수에 대해서 알아보았습니다. |