본문으로 바로가기

[D+5] C언어 소개 (4)

category 해킹&보안/C언어 2017. 2. 13. 22:00
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