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

조성익님의 프로필 이미지
조성익

작성한 질문수

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

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

scanf()함수에 대한 반환값에 대한 질문

작성

·

291

0

status = scanf("%d", &num);

scanf()함수에 대한 반환값이란, 포맷형식에 알맞는 입력이 들어온 개수라고 이해했습니다.
따라서, q 를 입력했을 때 형식에 맞지 않는 값이기 때문에 0을 반환한다는 것은 이해했습니다. (정수가 아니기 때문)
다만 1 12 를 입력했을 때, 왜 정수112로 입력을 받는지 이해가 가지 않습니다. 또, 정수 2개를 입력했기 때문에 반환값이 '2'가 되야하는 것이 아닌지 궁금합니다.
(1 12 enter) -> (q enter)
sum = 13

 

#include <stdio.h>

int main()
{
    int num, sum = 0;
    int status;

    printf("Enter an integer(q to quit) : ");

    status = scanf("%d", &num); // return value of scanf()
    
    while (status == 1) // equailty operator
    {
        sum += num;

        printf("Enter next integer(q to quit) : ");
        status = scanf("%d", &num);        
    }

    printf("Sum = %d", sum);
}

답변 1

0

정수에 담기는 값과

반환값을 혼동하신 것이 아닐까 싶습니다.

말씀대로 scanf() 함수는 입력을 형식에 맞게 읽어들여 그 개수를 반환합니다.

예를 들어, "1 12"를 입력한 경우, scanf("%d", &num)은 정수 1을 읽어들여

num에 할당하고 1을 반환합니다.

그리고, 다음 scanf("%d", &num)은 정수 12를 읽어들여 num에 할당하고 1을 반환합니다.

"q"를 입력한 경우, scanf("%d", &num)은 형식에 맞지 않는 값이기 때문에 0을 반환합니다.

조성익님의 프로필 이미지
조성익

작성한 질문수

질문하기