무한루프 걸리는데..어떻게 하죠?

조회수 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++); 여기에서 세미콜론 ;은 의도하신 건가요?

    일단 실행해보면 아마 처음부터

    1. if (arr[i] == arr[j]) 여기에서 무조건 == 조건이 충족됩니다. 왜냐하면 i는 그대로 0이고 for (j = 0; j < i; j++); 에서도 j < i도 둘 다 0이니 j++가 실행되지 않아서 값의 변화가 전혀 없습니다.
    2. i는 if문 안에 i--에서 -1이 되고 밖에 나오면 i++에서 다시 0으로 돌아옵니다.
    3. 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++; 
            //결국 변수 변화 없음
        }
    }
    

    이렇습니다.

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

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

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

(ಠ_ಠ)
(ಠ‿ಠ)