programmer_newest
20
2022-05-14 20:54:53
4
126

c언어 반복문 관련 질문입니다


이제 막 코딩 시작한 사람인데요, c언어 반복문에 오류가 생긴 것 같아서 질문드립니다.

srand(time(NULL));

int num = rand() % 100 + 1; // 1 - 100까지의 숫자

printf("숫자: %d\n", num);

int answer; // 정답

int chance = 5; // 기회

while (chance > 0) {

printf("남은 기회 %d번\n", chance--);

printf("숫자를 맞춰보세요. (1-100) : ");

scanf_s("%d", &answer);

if (answer < num) {

printf("UP!\n\n");

}

else if (answer > num) {

printf("DOWN!\n\n");

}

else if (answer == num) {

printf("\nCORRECT ANSWER!\n\n");

break;

}

else {

printf("\n알 수 없는 오류가 발생하였습니다.\n\n");

chance++;

}

if (chance == 0) {

printf("\nGAME OVER!\n\n");

}

}


여기에서 chance가 0이 되었을 때 while을 바로 통과하지 않고 2번째 if문을 거쳐서 갑니다. 원래대로라면 그냥 통과해버려야 하는 것 같은데 오류인 건가요?

0
  • 답변 4

  • defult
    16k
    2022-05-14 21:19:36

    change가 0이 되는 순간은 

    printf("남은 기회 %d번\n", chance--);가 화면에 출력된 이후고

    그 다음 루프가 유효한지 확인하는 순간은 while의 {}내 모든 처리가 끝났을 순간인데 


    "여기에서 chance가 0이 되었을 때 while을 바로 통과하지 않고 2번째 if문을 거쳐서 갑니다."

    라는게 뭐가 잘못된건지를 모르겠네요..


  • 대충벌레
    33
    2022-05-14 21:23:06

    프로그램은 거짓말을 하지않습니다 코드가 잘못짜인것 같습니다 

  • programmer_newest
    20
    2022-05-14 21:26:21 작성 2022-05-14 21:27:06 수정됨

    감사합니다 뒤에 붙는 ++,--에 대해서 잘못된 개념을 가지고 있었네요

  • 내가너또그럴줄
    116
    2022-05-14 22:36:35

    제 개인적인 스타일로는 

    else 는 어떤조건에서 타는지 알수없으니 의미가 없는것 같고

    chance-- 를 위에가 아닌 up과 down 두 위치로 옮기면 되지안8웰까 눈코딩 해봅니다 

    왜냐하면 답이 틀린컬 확인하고 난 다음에  찬스를 깍는게 논리~ㅓㄱ으로 맞아보여서요.

    그리고 추가하자면 1~100범위를 벗어난 값을 입력했을때에대한 방어 코드가 빠졌네요

  • 로그인을 하시면 답변을 등록할 수 있습니다.