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

지원님의 프로필 이미지
지원

작성한 질문수

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

8.4 사용자 인터페이스는 친절하게

오류 이유가 궁금합니다

작성

·

225

1

int main()

{

int count = 0;

while (1)

{

printf("Current count is %d. Continue?(y/n)\n", count);

if (getchar() == 'n')

break;

else if (getchar() == 'y')

count++;

else

printf("Please input y or n\n");

while (getchar() != '\n')

continue;

}

return 0;

}

 

강의에서 int c = getchat() 해서 c를 사용하니까 잘 되던데, if문이랑 else if문에 getchar()을 그대로 넣으면 왜 오류가 나는지 궁금합니다!

답변 1

1

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

getchar() 함수는 호출될 때 마다 표준입력으로 입력된 문자 하나를 읽어옵니다.
따라서, ifelse if 문에서 getchar() 함수를 각각 호출하면, 두 번 입력을 받게 되는 것입니다.

작성하신 코드를 살펴보면, if (getchar() == 'n') 에서 n 을 입력하면 break; 가 실행되지만,
그렇지 않으면 다음 else if (getchar() == 'y') 에서 또 다시 입력을 기다립니다.

따라서, int c = getchar(); 와 같은 방식으로 변수에 입력을 한 번만 저장하여 여러 조건에서 사용하는 것이 일반적입니다.

예시 코드를 첨부드립니다.

#include <stdio.h>

int main()
{
    int count = 0;
    int c;

    while (1)
    {
        printf("Current count is %d. Continue?(y/n)\n", count);
        
        c = getchar(); // 한 번만 입력을 받음

        if (c == 'n')
            break;
        else if (c == 'y')
            count++;
        else
            printf("Please input y or n\n");

        while (getchar() != '\n') // 입력 버퍼 비우기
            continue;
    }

    return 0;
}
지원님의 프로필 이미지
지원

작성한 질문수

질문하기