/*
        프로그램 목적: 포문을 사용해서 화면에 * 출력하기
*/

#include <stdio.h>
#define YES 1
#define NO 0

void print_star(int num_of_star);
char user_choice(void);
int main()
{
        int num_of_star;
        char choice;
        printf("이 프로그램은 사용자가 입력한 수만큼 *을 출력하고"
                "n다음 줄에 *개수를 하나씩줄여서 출력하게 됩니다"
                "n예) 5를 입력"
                "n        *****"
                "n         ****"
                "n          ***"
                "n           **"
                "n            *"
                );

        choice=YES;

        while(choice)
        {
                printf("n원하는 숫자를 입력하세요");
                scanf("%d", &num_of_star);

                print_star(num_of_star);

                choice=user_choice();
        }

        return 0;
}


/*
        함수 이름 : void print_star(int num_of_star)
        함구 목적 : 화면에 원하는 개수만큼 * 를 출력한다
        리턴값 : 없음
*/

void print_star(int num_of_star)
{
        int i, j;
        for(i=0; i<num_of_star; i++)
        {
                for(j=0; j<i; j++)
                        printf(" ");
        
                for(j=0; j<num_of_star-i; j++)
                        printf("*");

                printf("n");
        }
}

/*
        함수 이름 : char user_choice(void)
        함수 목적 : 사용자가 프로그램을 계속 할것인지를 묻는다
        리턴값 : YES, NO
*/

char user_choice(void)
{
        char choice;

        while(1)
        {
                printf("계속하시겠습니까? (y/n)n");
                fflush(stdin);
                scanf("%c", &choice);


                if(choice=='y' || choice=='Y')
                        return YES;

                else if(choice=='n' || choice=='N')
                        return NO;

                else printf("정확한 키를 눌러 주세요n");
        }
}



소스가 좀 복잡하죠 (이거 주석도 제대로 안달았군요 이제 보니)

하여간 의문점은 함수 user_choice()에서인데요
fflush(stdin);을 해주지 않으면 결과가

정확한 키를 눌러주세요
계속 하시겠습니까?
정확한 키를 눌러주세요
계속 하시겠습니까?

이렇게 2번나온다는건데요
fflush(stdin);을 하면 제대로 나옵니다

즉 stdin스트림에 어떤값이 남아있어서
scanf()함수가 그 값을 읽어버리고 루프를 한번 더 돈다는 결론이 나오는데요
(설명좀 어렵네요)

언제 어떻게 stdin에 값이 남아 있게 되는거죠?