336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
5) 표준 입력 함수
▣ scanf -> 가변인자 함수
- 함수 원형 : int scanf(const char * format, ...);
ex) scanf("%d", &a);
- 기능 : 입력을 받아 변수에 저장.
#include <stdio.h> int main() { int a = 0; int b = 0; printf("a = "); scanf("%d", &a); printf("b = "); scanf("%d", &b); printf("a + b = %d\n", a + b); return 0; }
- 실행화면
- 주소연산자 & 반드시 변수이름 앞에 붙일 것!
☞ a에 들어있는 값이 아닌 a의 주소가 어딘지를 알아야 하니까 주소연산자를 씀.
- 사용자가 입력하면 바로 소프트웨어로 가는 것이 아닌 stdin 이라는 표준입력 버퍼에 먼저 입력값이 머무르게 됨.
- 소프트웨어는 scanf 사용 시 두 번을 읽게 되는 데 처음에는 버퍼, 버퍼에 아무 것도 없으면 사용자의 키보드로부터 입력을 받아오게 됨.
▣ 또 다른 상황??
- 위의 코드에서 각각의 변수에 숫자를 넣지 않고 문자를 넣게 된다면...?
- b는 입력조차 받지 않는다???
☞ j (엔터) 가 현재 표준입력 버퍼에 담겨있음.
☞ a, "%d" 실패 -> 버퍼를 비우지 않음
☞ b, "%d" 실패 <- b는 버퍼에 남아있는 찌꺼기를 다시 읽어옴. 그렇기에 사용자 입력을 건너뜀.
- 이러한 상황을 방지하기 위해 return 값으로 체크함
- scanf의 return 값은 정상적으로 입력 받은 인자 수를 뜻함. => 저런 경우는 scanf의 리턴값이 0임.
- 또한 현재 버퍼에 남아있는 찌꺼기를 제거하기 위해서는 fflush(stdin); 을 사용하면 됨. (입력버퍼 지우기)
i2sec 대구지점 23기 수료생.
'해킹&보안 > C언어' 카테고리의 다른 글
[D+8] C언어 기초 (2) (0) | 2017.02.16 |
---|---|
[D+7] C언어 기초 (1) (0) | 2017.02.15 |
[D+4] C언어 소개 (3) (0) | 2017.02.09 |
[D+3] C언어 소개 (2) (0) | 2017.02.08 |
[D+2] C언어 소개 (1) (0) | 2017.02.07 |