scanf()함수 질문

미해결질문
soldaxx 프로필

안녕하세요 교수님.

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문을 빠져나갈려면 입력이 정수가 아닌 값을 넣는 방법 밖에 없는지  궁금합니다.

PP TREE 프로필
PP TREE 5달 전

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

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

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스