(C언어) while 사용시 printf 위치질문이 있습니다.

조회수 305회

안녕하세요. C언어 기초를 배우고 있습니다.

현재 여러 정수를 출력하다가 3의 배수만 합계, 평균내고, -1을 입력하면 탈출하는 코딩을 완성했는데.. printf의 while의{ } 안,밖 위치가 궁금합니다. 어떤 것은 안에 둬야 프로그램이 기능을 하고 , 어떤 것은 밖에 둬야 기능을 합니다. (편의상 include,main,return은 생략했습니다)

안에 둬야 기능하는 while, printf

int num;
int sum = 0;

while (1) {
scanf_s("%d", &num);
if (num == -1)break;
if (num % 3 != 0) continue;

    sum = num / 3;
    printf("%d\n", sum); }  // **while 구문 안에 들어감**

밖에 둬야 기능을 하는 while, printf

  • 이것은 정수를 계속 출력하다가 홀수만 합,평균을 내고 0을 입력하면 탈출하는 코딩입니다.

     int num;
     int sum = 0, cnt = 0;
     double avg;
    
    while (1) {
    scanf_s("%d", &num);
    if (num == 0) break;
    if (num % 2 != 0) {
    sum += num;
    cnt++;
    }
    }
    avg = (double)sum / cnt;
    printf("홀수의 합 =%d\n", sum);  // **while구문 밖에 위치**
    printf("홀수의 평균 =%.2lf\n", avg);
    

아무리봐도.. 같은 형식의 코딩인데.. 왜 하나는 while안에 있어야 하며, 왜 다른 하나는 while밖에 있어야하는지.. 이해가 안되네요 ㅠ 혹시 C 언어 잘하시는 분 답변 부탁드립니다^

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    while은 반복문입니다. 따라서 반복문 안에 적은 출력함수는 반복적으로 실행됩니다.

    while (1) {
        scanf_s("%d", &num);
        if (num == -1)break;
        if (num % 3 != 0) continue;
    
        sum = num / 3;
        printf("%d\n", sum);
    }
    

    위 코드의 printf는 반복문의 내용의 한줄이기때문에 반복할때마다 실행됩니다. 숫자를 하나 입력받고 입력 숫자가 -1이라면 반복문 탈출하고, 3의 배수일 때마다 출력합니다.

    while (1) {
        scanf_s("%d", &num);
        if (num == 0) break;
        if (num % 2 != 0) {
    
        sum += num;
        cnt++;
        }
    }
    avg = (double)sum / cnt;
    printf("홀수의 합 =%d\n", sum);  // **while구문 밖에 위치**
    printf("홀수의 평균 =%.2lf\n", avg);
    

    반면에 위의 코드는 반복실행중에는 아무런 출력도 없고, 반복 실행이 모두 끝난후 최종적으로 한번만 출력합니다.

    결론: 반복적인 행동중 매번 출력할 일이 있을 때는 반복문안에 출력문을 적어야 하고, 행동중이 아닌 행동이 모두 끝난후에 출력할 때에는 반복문 밖에 출력문을 적어야 합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 아! 그렇군요! 감사합니다 ^^ 배창일 2022.10.23 12:15

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

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

(ಠ_ಠ)
(ಠ‿ಠ)