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

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)