do while 문에서 입력받는 프로그램, 한 번은 되는데 그 다음이 이상함.
조회수 529회
#include <stdio.h>
int main(void)
{
char ch;
int x, y;
int result;
printf("*****************\n");
printf("A--- Add\n");
printf("S--- Subtract\n");
printf("M--- Multiply\n");
printf("D--- Divide\n");
printf("Q--- Quit\n");
printf("*****************\n");
do
{
repeat :
printf("연산을 선택하시오: ");
ch = getchar();
printf("두수를 공백으로 분리하여 입력하시오: ");
scanf_s("%d %d", &x, &y);
if (ch == 'A')
result = x + y;
else if (ch == 'S')
result = x - y;
else if (ch == 'M')
result = x * y;
else if (ch == 'D')
result = x / y;
else if (ch == 'Q')
break;
else
goto repeat;
printf("%d\n", result);
} while (1);
return 0;
}
첫번째 실행은 "연산을 선택하시오" , "두수를 공백으로 분리하여 입력하시오." 가 정상적으로 출력되는데, 두번째 실행부터 이상하네요, 왜 저렇게 한 번에 출력될까요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
int main(void) { char ch; int x, y; int result; printf("*****************\n"); printf("A--- Add\n"); printf("S--- Subtract\n"); printf("M--- Multiply\n"); printf("D--- Divide\n"); printf("Q--- Quit\n"); printf("*****************\n"); do { repeat: printf("연산을 선택하시오: "); //ch = getchar(); while (1) { ch = getchar(); if (ch != '\n') break; } printf("두수를 공백으로 분리하여 입력하시오: "); scanf_s("%d %d", &x, &y); if (ch == 'A') result = x + y; else if (ch == 'S') result = x - y; else if (ch == 'M') result = x * y; else if (ch == 'D') result = x / y; else if (ch == 'Q') break; else goto repeat; printf("%d\n", result); } while (1); return 0; }
첫 번째 getchar()와 scanf_s()를 하고 나서 입력 버퍼에 '\n'이 flush되지 않고 남아 있다가 두 번째 getchar()가 실행될 때 사용자 입력 전에 입력이 되어서 발생하는 문제로 \n은 버리도록 수정을 하니 정상 동작합니다. 도움이 되셨길 바랍니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력