C 표준 입력 함수 scanf
안녕하세요 열코입니다.
저번 시간에 C언어 표준 출력 함수인 printf() 함수에 대해 알아봤는데요.
이번 시간에는 C언어 표준 입력 함수인 scanf() 함수에 대해 알아보겠습니다.
scanf() 함수 역시 printf()와 같이 표준 입출력 헤더파일인 stdio.h에 포함되어 있으므로
사용시,
1 | #include <stdio.h> |
를 추가해줍니다.
scanf() 함수의 프로토타입입니다.
1 2 3 4 | int scanf( const char *format [, argument]... ); | cs |
printf() 함수와 동일하게 형식 필드 문자 format과 선택 인수들이 있습니다.
형식 필드 문자는 printf() 함수의 형식 필드 문자를 참고해주세요. (단 a 문자는 사용할 수 없습니다.)
반환 값 역시 printf() 함수와 동일한 int 형이며, 지정된 필드 수를 반환합니다.
다음은 scanf() 함수의 기본 예제 소스 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int main() { int i; printf("숫자를 입력해 주세요 : "); scanf("%d", &i); printf("입력받은 숫자는 %d입니다.\n", i); return 0; } | cs |
scanf() 함수의 두번째 인자들은 저장 할 변수의 주소이며, 변수 이름 앞에 & 기호를 꼭 붙여주어야 합니다.
이는 주소값을 의미하며, 해당 자료는 포인터강좌를 참고하세요.
또한 여러 데이터를 한번에 입력받을 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> int main() { int i; float f; char c; char s[100]; printf("정수, 실수, 문자, 문자열 순으로 입력해주세요 : "); if(scanf("%d %f %c %s", &i, &f, &c, s) != 4) { printf("잘못된 입력입니다."); } else { printf("정수 : %d\n", i); printf("실수 : %f\n", f); printf("문자 : %c\n", c); printf("문자열 : %s\n", s); } return 0; } | cs |
4개를 입력 받기 때문에 scanf() 함수의 반환값으로 4가 반환되며,
이가 아니 경우(적거나 많은 경우) 잘못된 입력을 출력합니다.
위 설명에서 scanf() 함수의 두번째 인수들의 이름 앞에 & 기호를 붙이라고 했는데요.
하지만 %s에 해당하는 인수는 &s가 아닌 그냥 s네요.
이는 char 배열(문자열)의 이름과 관계가 있는데요.
배열의 이름은 배열의 첫번째 원소의 주소와 같습니다.
이에 대한 설명은 배열강좌에 설명되어 있으며, C언어 초급자 분이시면
그냥 문자열 입력받을때는 &기호를 생략한다. 라고 알고 계시면 되겠습니다.
필요에 따라 * 기호를 추가하여 일부 입력을 무시할 수도 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int main() { int i; printf("숫자를 입력해 주세요 : "); scanf("%*s %d", &i); printf("입력받은 숫자는 %d입니다.\n", i); return 0; } | cs |
첫번째 인수인 %s의 입력을 무시합니다.
이 경우 공백이나 새로운 줄 입력까지의 입력을 무시합니다.
이상 'C 표준 입력함수'에 대해 알아보았습니다.
질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!
메인 페이지로 이동하시면 더 많은 자료를 볼 수 있습니다.
'C, C++' 카테고리의 다른 글
C언어 변수 이름이 숫자로 시작할 수 없는 이유 (0) | 2018.11.13 |
---|---|
C 정적(static) 변수 (0) | 2018.10.29 |
C 변수 선언 및 키워드 (0) | 2018.10.25 |
C 표준 출력 함수 printf() (0) | 2018.10.22 |
C++ 가상 함수(Virtual Function) (8) | 2018.10.19 |
C++ 연산자 오버로딩 (2) | 2018.10.12 |
C++ 함수 오버로딩 (0) | 2018.10.11 |
C/C++ 메모리 동적할당 (0) | 2018.10.11 |