/*
프로그램 목적: 포문을 사용해서 화면에 * 출력하기
*/
#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에 값이 남아 있게 되는거죠?