c언어 switch문 사칙연산 프로그램 질문입니다!!
조회수 813회
pragma warning(disable:4996)
include
void calculate(); int main(void) { calculate(); return 0; } void calculate() { char option; int num1, num2;
while (1) {
printf("+ - * / 중 하나를 선택하시오: ");
scanf("%c", &option);
getchar();
switch (option) {
case'+':
printf("두 값을 입력하시오: ");
scanf("%d %d", &num1, &num2);
getchar();
printf("%d + %d = %d\n", num1, num2, num1 + num2);
break;
case'-':
printf("두 값을 입력하시오: ");
scanf("%d %d", &num1, &num2);
getchar();
printf("%d - %d = %d\n", num1, num2, num1 - num2);
break;
case'*':
printf("두 값을 입력하시오: ");
scanf("%d %d", &num1, &num2);
getchar();
printf("%d x %d = %d\n", num1, num2, num1 * num2);
break;
case'/':
printf("두 값을 입력하시오: ");
scanf("%d %d", &num1, &num2);
getchar();
printf("%d / %d = %d(몫만 출력)\n", num1, num2, num1 / num2);
break;
default:
printf("다시 입력하세요!!!!\n");
continue;
}
break;
}
} 이 코드를 실행하여 printf("+ - * / 중 하나를 선택하시오: "); 이 문장이 실행하여서 제가 일부러 50959559595959이런식으로 대입을 했거든요 ㅜㅜ 근데 예상과는 다르게
- - * / 중 하나를 선택하시오: 505051515150505 다시 입력하세요!!!!
- - * /중 하나를 선택하시오: 다시 입력하세요!!!!
- - * / 중 하나를 선택하시오: 다시 입력하세요!!!!
- - * / 중 하나를 선택하시오: 다시 입력하세요!!!!
- - * / 중 하나를 선택하시오: 다시 입력하세요!!!!
- - * / 중 하나를 선택하시오: 다시 입력하세요!!!!
- - * / 중 하나를 선택하시오: 다시 입력하세요!!!!
- - * / 중 하나를 선택하시오: 다시 입력하세요!!!!
- - * / 중 하나를 선택하시오: 이런식으로 계속 떠가지구 왜 그런건가요??
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
앗ㅅ 윗분과 같은 문제를 겪고 계시는군요!
해당 문제는
scanf()
를 통해 잘못 입력받은 값들이 계속 입력 스트림에 남아서 깽판을 부리는 것 때문에 발생된답니다. 문제를 해결하기 위해서는 입력 스트림을 적절하게 비워주면 되어요.처음 접하게 되면 꽤나 골때리는 버그죠ㅎ...
코드 중
printf("다시 입력하세요!!!!\n");
밑에while (getchar() != '\n') {}
한 줄을 추가하여, 입력 스트림을 비워주시면 의도하신대로 정상 실행될거에요!물론 제 방법은 어디까지나 예시로, 다른 좋은 방법도 많아요 X3
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력