무한루프 걸리는데..어떻게 하죠?
조회수 711회
include
int main(void) { int i = 0; int arr[10] = { 0 }; int j; int temp;
while (i < 10)
{
printf("정수 입력%d >", i);
scanf_s("%d", &arr[i]);
for (j = 0; j < i; j++);
if (arr[i] == arr[j])
{
printf("중복입니다. 다시 시도해주세요");
i--;
}
i++;
}
}
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
i
가 계속0
이 되어서 무한 반복입니다. 코드를 한줄 한줄 살펴보면..while (i < 10) // i = 0인 상태 { printf("정수 입력%d >", i); scanf_s("%d", &arr[i]); for (j = 0; j < i; j++); // i = 0, j = 0 if (arr[i] == arr[j]) // arr[0] == arr[0]이라서 if 진입 { printf("중복입니다. 다시 시도해주세요"); i--; // i = -1, j = 0 } i++; // 다시 i = 0, j = 0 } //그리고 i = 0이라 위에 상태 무한 반복
-
for (j = 0; j < i; j++);
여기에서 세미콜론 ;은 의도하신 건가요?일단 실행해보면 아마 처음부터
if (arr[i] == arr[j])
여기에서 무조건 == 조건이 충족됩니다. 왜냐하면 i는 그대로 0이고for (j = 0; j < i; j++);
에서도 j < i도 둘 다 0이니 j++가 실행되지 않아서 값의 변화가 전혀 없습니다.- i는 if문 안에
i--
에서 -1이 되고 밖에 나오면i++
에서 다시 0으로 돌아옵니다. - i는 영원히 0이니 결국
arr[0]
의 값만 계속 변할뿐while (i < 10)
에서는 무한 루프가 일어납니다.
printf, scanf를 뺀 순서를 보시면
while (i < 10) { for (j = 0; j < i; j++); // 0 < 0이라 변수 변화 없음 if (arr[i] == arr[j]) { i--; i++; //결국 변수 변화 없음 } }
이렇습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력