작성
·
73
1
#define CRTSECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int n, i;
char c;
while (1)
{
printf("Enter the leter of your choice: \n");
printf("a. avengers\tb. beep\n");
printf("c. count\tq. quit\n");
scanf("%c", &c);
if (c == 'a')
printf("Avengers assemble!\n");
else if (c == 'b')
printf("\a");
else if (c == 'c')
{
printf("Enter an integer: ");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
printf("%d\n", i);
}
}
else if (c == 'q')
break;
}
return 0;
}
답변 1
1
안녕하세요? 질문&답변 도우미 Soobak 입니다.
해당 강의의 초반 예제 문제에 대한 내용이시군요.
스스로 구현하려 노력하신 부분이 멋있게 보여서, 조심스레 칭찬을 드리고 싶네요.
우선, 문제의 원인은 scanf()
함수가 문자 입력 후 버퍼에 남아있는 개행 문자(`\n
`)를 처리하지 않기 때문입니다. 사용자 입력을 완료할 때, 엔터 키를 눌러 개행 문자를 추가로 입력한다는 부분을 생각해보시면 이해에 도움이 되실 것 같습니다.
이와 관련하여서는, 지금까지의 강의에서의 '버퍼 비우기' 에 대한 교수님의 설명을 떠올려보시면 도움이 되실 것 같습니다.
만약, 어려우시다면 해당 강의 9:29 부분의 char get_first_char(void)
함수에 대한 교수님의 설명과 해당 부분에서 열어진 코드 파일의 73
~ 74
라인의 코드 while (getchar() != '\n') continue;
부분을 참고해보시면 좋을 것 같습니다.
질문자님께서 제공해주신 코드에 단순히 버퍼를 비우는 코드만 추가하여, 의도대로 동작하는 코드를 첨부드립니다.
한 번, 위 내용을 참고하시어 스스로 구현을 진행해보신 후에, 비교 및 참고만 해보시는 정도로 살펴보시면 도움이 되실 것 같습니다.
#define CRTSECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int n, i;
char c;
while (1)
{
printf("Enter the leter of your choice: \n");
printf("a. avengers\tb. beep\n");
printf("c. count\tq. quit\n");
scanf("%c", &c);
while (getchar() != '\n')
continue ;
if (c == 'a')
printf("Avengers assemble!\n");
else if (c == 'b')
printf("\a");
else if (c == 'c')
{
printf("Enter an integer: ");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
printf("%d\n", i);
}
}
else if (c == 'q')
break;
}
return 0;
}