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

솔다님의 프로필 이미지

작성한 질문수

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

6.18 루프 안에서 함수의 반환값 사용하기

scanf()함수 질문

20.01.15 19:21 작성

·

184

1

안녕하세요 교수님.

int main()

{

    int base, exponent;

while (scanf("%d %d", &base, &exponent) == 2)

{

int result = 1;

for (int i = 0; i < exponent; i++)

result *= base;

printf("OUTPUT:%d\n", result);

}

}

<출력>

3 5 7

OUTPUT:243

5 6 7

OUTPUT:16807

OUTPUT:279936

6.18 루프 안에서 함수의 반환값 사용하기

6분 대 질문입니다.

scanf()함수가 반환값이 입력 받은 변수의 개수라는 걸로 배웠습니다.

그러나 위 코드에서 scanf()로 3개(예를 들어 콘솔에서 3 5 7 이렇게 3개를 침)를 입력받으면 마지막 한개가 밀려나가는 형식으로 스스로 생각했습니다.

궁금한 것은 애당초 3개를 입력받으면 while문 조건이 맞지 않아 실행되지 않아야 정상이라고 생각하는데 이와 같이 실행되는 이유를 알고 싶습니다. 또한 while문을 빠져나갈려면 입력이 정수가 아닌 값을 넣는 방법 밖에 없는지  궁금합니다.

답변 1

3

홍정모님의 프로필 이미지
홍정모
지식공유자

2020. 01. 16. 00:19

안녕하세요? '밀려나가는' 것이 어떤 의미인지 정확히는 모르겠는데, 제가 생각하기로는 오해의 여지가 있는 부분을 말씀드리자면, 나머지 하나가 사라지는 것이 아니라 버퍼에 남아 있습니다. 버퍼에 남아 있기 때문에 다음 번 scanf가 읽을 수가 있습니다.

그래서 강제로 버퍼를 지우는 경우도 많습니다. 문자열 입력받을 때 배웁니다.

솔다님의 프로필 이미지

작성한 질문수

질문하기