인프런 커뮤니티 질문&답변

강진성님의 프로필 이미지
강진성

작성한 질문수

홍정모의 따라하며 배우는 C언어

6.1 while 반복 루프에서 scanf()의 반환값 사용하기

프로그램 작성 중에 scanf 값을 따로 안써도 되는지에 대해

작성

·

160

1

교수님께서 작성하신 강의답안에서 질문이 있습니다.

보면 scanf함수를 따로 쓰지 않고 status = scanf("%d", &num);만 입력하셨는데 이렇게 적어도 scanf함수가 동작하는 이유가 궁금합니다.

또, 이 윗줄 바로 위에 scanf함수를 따로 실행해도 상관없는지도 궁금합니다.

 

답변 1

2

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

scanf() 함수의 원형은

int scanf(const char* format, ...); 으로 반환값이 int 자료형이며, 값은 '성공적으로 읽어들인 변수의 개수' 입니다.

따라서, status = scanf("%d", &num)scanf("%d", &num) 함수가 동작한 이후, status 변수에 '성공적으로 읽어들인 변수의 개수' 를 반환하게 됩니다.

즉, 사용자가 정수를 올바르게 입력했다면, 하나의 정수를 읽어들여 1 을 반환하고, 그렇지 않다면 0 이나 EOF 를 반환합니다.
이렇게, 반환값을 통하여 scanf() 함수가 성공적으로 값을 읽었는지 확인하기 위해 유용하게 사용됩니다.

 

scanf() 함수를 두 번 연속하여 사용하셔도 문제는 없습니다.
다만, 첫 번째 scanf() 함수가 실행되어 입력을 읽어들인 후,
표준 입력 버퍼에 남아있는 '다음 입력'을 두 번째 scanf() 함수가 처리하는 과정으로 진행된다는 점을 참고하시면 좋을 것 같습니다.

참고 : cppreference - std::scanf (링크)

강진성님의 프로필 이미지
강진성
질문자

감사합니다!

 

강진성님의 프로필 이미지
강진성

작성한 질문수

질문하기