안녕하세요! 왜 무한루프가 발생하는지 알고싶습니다.
조회수 1117회
안녕하세요! c 연습을 하다가 무한루프에 빠져버렸는데 해결을 못하고 있습니다.
상황은 이렇습니다.
1과 10사이의 정수를 받는 경우는 for문을 종료하고 그 이외의 숫자를 받으면 다시 입력받도록 했습니다.
아래는 작성한 코드입니다.
int testcase;
for (;;) {
testcase = 0;
printf("enter the number of testcase : ");
scanf_s("%d", &testcase);
if (testcase > 10 || testcase < 1) {
printf("wrong number. please enter a number between 1 and 10 in integer type. \n");
}
else {
break;
}
}
여기서 문제점은 범위 외의 소수점 자리를 갖는 숫자나 문자 등을 입력하면,
printf("wrong number. please enter a number between 1 and 10 in integer type. \n");
문장이 계속 실행된다는 것입니다.
디버깅 모드로 변수 testcase 가 입력에 따라서 어떤 값을 갖는지 관찰을 해봐도 왜 무한루프가 발생하는지 모르겠습니다.
많은 의견 부탁드립니다! 감사합니다 ( _ _ )
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
scanf를 통해 잘못 입력받은 값들이 계속 입력 스트림에 남아서 깽판을 부리는 것 때문에 발생하는 문제네요! 문제를 해결하기 위해서는 입력 스트림을 적절하게 비워주면 된답니다.
처음 접하게 되면 꽤나 골때리는 버그죠ㅎ...
하여간에 아래 코드를 참고해보세요. 추가한 줄은, 입력 스트림을 비워주기 위한
while (getchar() != '\n') {}
한 줄이에요. 물론 이 코드는 어디까지나 예시로, 다른 좋은 방법도 많답니다 :3#include <stdio.h> int main(void) { int testcase; while (1) { testcase = 0; printf("enter the number of testcase : "); scanf_s("%d", &testcase); if (testcase > 10 || testcase < 1) { while (getchar() != '\n') {} //입력 스트림 비워주기 printf("wrong number. please enter a number between 1 and 10 in integer type. \n"); } else { break; } } }
-
(•́ ✖ •̀)
알 수 없는 사용자
- 오오 감사합니다!! 완벽하게 해결됐습니다. :D 알 수 없는 사용자 2019.10.17 14:20
- @jcurry 해결되셨다니 다행입니다 >3<)/ 알 수 없는 사용자 2019.10.21 09:28
-
댓글 입력